https://leetcode.com/problems/simplify-path/
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/"
, => "/home"
path = "/a/./b/../../c/"
, => "/c"
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"
.
Code
class Solution(object): def simplifyPath(self, path): """ :type path: str :rtype: str """ paths = path.split("/") fs = [] for p in paths: if p == "..": # when fs is empty, ".." has no effect if fs: fs.pop() elif p == ".": pass elif p == "": pass else: fs.append(p) return "/" + "/".join(fs)
Idea
Since there could be “..” (the up level folder) and “.” (the current folder) in the path, it is natural to maintain a stack to record folder hierarchy. The crux of this problem is to consider all possible corner cases, such as paths with two or more consecutive backslashes, or paths ending with backslashes, or paths already landing in “/” but with more “..” followed.