LeetCode 71 Simplify Path(Python详解及实现)

来源:互联网 发布:java将xml转换成json 编辑:程序博客网 时间:2024/06/05 18:31

【题目】

Given an absolute path for a file(Unix-style), simplify it.

 

For example,

path = "/home/", =>"/home"

path = "/a/./b/../../c/", =>"/c"

 

简化Unix上的绝对路径,也就是多个'/'代表一个,'..'表示返回上一级目录,‘.'代表当前目录。

 

【思路】

path = "/a/./b/../../c/", =>"/c"

整个过程:

l  “/”根目录

l  “a”进入子目录a,目前处于“/a”

l  “.”当前目录,不操作仍处于“/a”

l  “/b”进入子目录b,目前处于“/a/b”

l  “..”返回上级目录,处于“/a”

l  “..”返回上级目录,处于根目录“/”

l  “c”进入子目录c,目前处于“/c”

 

利用栈解决问题:

把非'/'和'.'push进栈,如果遇到'..'出栈pop,否则压栈push。最后还原成路径格式。

 

【Python实现】

方法一:利用栈

# -*- coding: utf-8 -*-

"""

Created on Sat Aug  5 13:32:23 2017

 

@author: Administrator

"""

 

class Solution(object):

   def simplifyPath(self, path):

       """

       :type path: str

       :rtype: str

       """

       stack = []

       i = 0

       res = ''

       path_len = len(path)

       while i < path_len:

           j = i+1

           while j < path_len and path[j] !="/":

                j += 1

           subpath = path[i+1:j]

           if len(subpath) > 0:

                if subpath == "..":

                    if stack != []:

                        stack.pop()

                elif subpath != ".":

                    stack.append(subpath)

           i = j

       if stack == []:

           return "/"

       for character in stack:

           res += "/"+ character

       print(res)

       return res

S = Solution()

S.simplifyPath("/a/./b/../../c/")               

 

 

方法二:利用python的split()函数

class Solution:

    #@param path, a string

    #@return a string

   def simplifyPath(self, path):

       path = path.split('/')#将/作为划分标志,转化为list  ['', 'a', '.', 'b','..', '..', 'c', '']

       curr = '/'

       for character in path:

           if character == '..':

                if curr != '/':

                    curr ='/'.join(curr.split('/')[:-1])

                    if curr == '': curr = '/'

           elif character != '.' andcharacter != '':

                if curr != '/':

                    curr += '/' + character

                else:

                   curr += character

       print(curr)

       return curr

 

S = Solution()

S.simplifyPath("/a/./b/../../c/")    

原创粉丝点击