--- title: '71. Simplify Path' description: 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 icon: dot topics: - { name: "String", slug: "string" } - { name: "Stack", slug: "stack" } issue: "https://github.com/prdlk/leetcode/issues/70" sidebar: label: 'Simplify Path' badge: 'Medium' --- ### 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 <= 3000` - `path` consists of English letters, digits, period '.', slash '/' or '_'. - `path` is a valid absolute Unix path. ## Solution ```py 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) ```