71. Simplify Path
You are given an absolute path for a Unix-style file system, which always begins with a slash '/'. Your task is to transform this absolute path into its simplified canonical path
Example 1:
- Input:
path = "/home/" - Output:
"/home" - Explanation: The trailing slash should be removed.
Example 2:
- Input:
path = "/home//foo/" - Output:
"/home/foo" - Explanation: Multiple consecutive slashes are replaced by a single one.
Example 3:
- Input:
path = "/home/user/Documents/../Pictures" - Output:
"/home/user/Pictures" - Explanation: A double period “..” refers to the directory up a level (the parent directory).
Example 4:
- Input:
path = "/../" - Output:
"/" - Explanation: Going one level up from the root directory is not possible.
Example 5:
- Input:
path = "/.../a/../b/c/../d/./" - Output:
"/.../b/d" - Explanation: “…” is a valid name for a directory in this problem.
Constraints:
1 <= path.length <= 3000pathconsists of English letters, digits, period ‘.’, slash ‘/’ or ‘_’.pathis a valid absolute Unix path.
Solution
class Solution:
def simplifyPath(self, path: str) -> str:
stack = []
segments = [item for item in path.split("/") if item]
for p in segments:
if stack and p == "..":
stack.pop()
elif not stack and p == ".." or p == ".":
continue
else:
stack.append(p)
return "/" + "/".join(stack)