# Given an absolute path for a file (Unix-style), simplify it.
#
# For example,
# path = "/home/", => "/home"
# path = "/a/./b/../../c/", => "/c"
#
# click to show corner cases.
#
# Corner Cases:
#
# Did you consider the case where path = "/../"?
# In this case, you should return "/".
# Another corner case is the path might contain multiple slashes '/' together,
# such as "/home//foo/".
# In this case, you should ignore redundant slashes and return "/home/foo".
# 思路:
# 1. split "/" 形成List, 同时剔除 "." 和 ""
# 2. 如果 ".." 就 pop 前面的
# 3. 反之则入队
Stack:
class Solution():
def simplifyPath(self, path):
tokens, stack = [p for p in path.split("/") if p!="." and p!=""], []
for t in tokens:
if t == "..":
if stack:
stack.pop()
else:
stack.append(t)
return "/" + "/".join(stack)
if __name__ == "__main__":
assert Solution().simplifyPath("/home//foo/") == '/home/foo'