mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 21:22:43 +00:00
70 lines
2.1 KiB
Plaintext
70 lines
2.1 KiB
Plaintext
---
|
|
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"
|
|
companies:
|
|
- { name: "Bloomberg", period: "Thirty Days", frequency: 69.8 }
|
|
- { name: "Google", period: "Three Months", frequency: 28.8 }
|
|
- { name: "Amazon", period: "Three Months", frequency: 21.2 }
|
|
- { name: "Snowflake", period: "Six Months", frequency: 58.7 }
|
|
- { name: "Meta", period: "Six Months", frequency: 50.6 }
|
|
- { name: "Microsoft", period: "Six Months", frequency: 24.1 }
|
|
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)
|
|
```
|