Leetcode 71 Simplify Path

给定一个文档 (Unix-style) 的完全路径,请进行路径简化。
例如,
path = “/home/“, => “/home”
path = “/a/./b/../../c/“, => “/c”

边界情况:
你是否考虑了 路径 = “/../“ 的情况?
在这种情况下,你需返回 “/“ 。
此外,路径中也可能包含多个斜杠 ‘/‘ ,如 “/home//foo/“ 。
在这种情况下,你可忽略多余的斜杠,返回 “/home/foo” 。

题意分析:
这道题对于不太熟悉linux命令行的人来说可能有点不太友好。
其实就是相当于问你键入这么长一串命令,最后在哪个文件夹

思路分析:
我们知道键入'.'无变化,可以忽略,键入'..'则是回到上一个文件夹,其余合法操作都对文件路径本身无影响。

而这种需要将最近输入的元素删除的操作,很容易想到是通过栈来完成。
我们可以将path按照/分割开来,那么每一部分可能是:

  1. '',为空
  2. 'name',文件名
  3. '.',无影响
  4. '..',回到上一个文件夹

总共可能如上,代码如下:

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)