LeetCode 71「简化路径」:把 Unix 风格的绝对路径规范化为最短形式。规则:.忽略、..弹出上级、多个/视为一个、返回以/开头。
思路:栈
按/切分后依次处理每一段:
""或".":忽略"..":栈非空则弹出- 其他:入栈
最后栈中元素用/拼接。因为只关心上级目录而不用匹配同级,栈是最直观的结构(实际list即可)。
Python3 代码
classSolution:defsimplifyPath(self,path:str)->str:stack=[]forseginpath.split('/'):ifseg==''orseg=='.':continueelifseg=='..':ifstack:stack.pop()else:stack.append(seg)return'/'+'/'.join(stack)复杂度
- 时间 O(n):切分和拼接都是线性
- 空间 O(n):最坏情况(全是目录名)栈存所有段
几个边界情况:
- 根目录路径
/→""拼接后返回/ /../→ 栈空时..不起作用,返回//a//b/./c/../→ 栈为['a', 'b'],返回/a/b/a/../../..→ 连续弹到空为止,返回/
split('/')天然处理了连续斜杠(产生空字符串被忽略),无需特殊处理。