LeetCode 题解工作台
简化路径
给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为 更加简洁的规范路径 。 在 Unix 风格的文件系统中规则如下: 一个点 '.' 表示当前目录本身。 此外,两个点 '..' 表示将目录切换到上一级(指向父目录)。 任意多个连续的斜…
2
题型
7
代码语言
3
相关题
当前训练重点
中等 · 栈·状态
答案摘要
我们先将路径按照 `'/'` 分割成若干个子串,然后遍历每个子串,根据子串的内容进行如下操作: - 若子串为空,或者为 `'.'`,则不做任何操作,因为 `'.'` 表示当前目录;
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 栈·状态 题型思路
题目描述
给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为 更加简洁的规范路径。
在 Unix 风格的文件系统中规则如下:
- 一个点
'.'表示当前目录本身。 - 此外,两个点
'..'表示将目录切换到上一级(指向父目录)。 - 任意多个连续的斜杠(即,
'//'或'///')都被视为单个斜杠'/'。 - 任何其他格式的点(例如,
'...'或'....')均被视为有效的文件/目录名称。
返回的 简化路径 必须遵循下述格式:
- 始终以斜杠
'/'开头。 - 两个目录名之间必须只有一个斜杠
'/'。 - 最后一个目录名(如果存在)不能 以
'/'结尾。 - 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含
'.'或'..')。
返回简化后得到的 规范路径 。
示例 1:
输入:path = "/home/"
输出:"/home"
解释:
应删除尾随斜杠。
示例 2:
输入:path = "/home//foo/"
输出:"/home/foo"
解释:
多个连续的斜杠被单个斜杠替换。
示例 3:
输入:path = "/home/user/Documents/../Pictures"
输出:"/home/user/Pictures"
解释:
两个点 ".." 表示上一级目录(父目录)。
示例 4:
输入:path = "/../"
输出:"/"
解释:
不可能从根目录上升一级目录。
示例 5:
输入:path = "/.../a/../b/c/../d/./"
输出:"/.../b/d"
解释:
"..." 在这个问题中是一个合法的目录名。
提示:
1 <= path.length <= 3000path由英文字母,数字,'.','/'或'_'组成。path是一个有效的 Unix 风格绝对路径。
解题思路
方法一:栈
我们先将路径按照 '/' 分割成若干个子串,然后遍历每个子串,根据子串的内容进行如下操作:
- 若子串为空,或者为
'.',则不做任何操作,因为'.'表示当前目录; - 若子串为
'..',则需要将栈顶元素弹出,因为'..'表示上一级目录; - 若子串为其他字符串,则将该子串入栈,因为该子串表示当前目录的子目录。
最后,我们将栈中的所有元素按照从栈底到栈顶的顺序拼接成字符串,即为简化后的规范路径。
时间复杂度 ,空间复杂度 。其中 为路径的长度。
class Solution:
def simplifyPath(self, path: str) -> str:
stk = []
for s in path.split('/'):
if not s or s == '.':
continue
if s == '..':
if stk:
stk.pop()
else:
stk.append(s)
return '/' + '/'.join(stk)
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | Depends on the final approach |
| 空间 | Depends on the final approach |
面试官常问的追问
外企场景- question_mark
Look for the candidate's ability to apply stack-based state management to a real-world path traversal problem.
- question_mark
Assess how well the candidate handles edge cases like empty or root paths and redundant slashes.
- question_mark
Check for clear and efficient processing of the path string and stack manipulation.
常见陷阱
外企场景- error
Forgetting to handle consecutive slashes as a single slash, which can lead to incorrect paths.
- error
Failing to correctly manage the '..' operation to navigate to the parent directory.
- error
Not accounting for the path starting with a slash, which is an important aspect of an absolute path.
进阶变体
外企场景- arrow_right_alt
Modify the problem to handle relative paths in addition to absolute paths.
- arrow_right_alt
Handle cases where the input path contains symbolic links or references to special directories like '/var'.
- arrow_right_alt
Extend the problem to handle a file system with deeper nested directories.