给定一个文档 (Unix-style) 的完全路径,请进行路径简化。
例如,
path = “/home/“, => “/home”
path = “/a/./b/../../c/“, => “/c”
边界情况:
你是否考虑了 路径 = “/../“ 的情况?
在这种情况下,你需返回 “/“ 。
此外,路径中也可能包含多个斜杠 ‘/‘ ,如 “/home//foo/“ 。
在这种情况下,你可忽略多余的斜杠,返回 “/home/foo” 。
题意分析:
这道题对于不太熟悉linux命令行的人来说可能有点不太友好。
其实就是相当于问你键入这么长一串命令,最后在哪个文件夹
思路分析:
我们知道键入'.'
无变化,可以忽略,键入'..'
则是回到上一个文件夹,其余合法操作都对文件路径本身无影响。
而这种需要将最近输入的元素删除的操作,很容易想到是通过栈来完成。
我们可以将path
按照/
分割开来,那么每一部分可能是:
''
,为空'name'
,文件名'.'
,无影响'..'
,回到上一个文件夹
总共可能如上,代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14# 32ms, beats 52.31%
class Solution(object):
def simplifyPath(self, path):
L = path.split('/')
stack = []
for elem in L:
if not elem or elem == '.': continue
if elem == '..':
if stack:
stack.pop()
else:
stack.append('/' + elem)
if not stack: return '/'
return ''.join(stack)