跳到主要内容

Simplify Path

描述

Given an absolute path for a file (Unix-style), simplify it.

For example,

  • path = "/home/", => "/home"
  • path = "/a/./b/../../c/", => "/c"

Corner Cases:

  • Did you consider the case where path = "/../"?

    In this case, you should return "/".

  • Another corner case is the path might contain multiple slashes '/' together, such as "/home//foo/".

    In this case, you should ignore redundant slashes and return "/home/foo".

分析

很有实际价值的题目。

代码

# Simplify Path
# 时间复杂度O(n),空间复杂度O(n)
class Solution:
def simplifyPath(self, path: str) -> str:
dirs = []
i = 0
while i < len(path):
i += 1
j = path.find('/', i)
if j < 0:
j = len(path)
dir = path[i:j]
# 当有连续 '///'时,dir 为空
if dir and dir != '.':
if dir == '..':
if dirs:
dirs.pop()
else:
dirs.append(dir)
i = j
if not dirs:
return '/'
return '/' + '/'.join(dirs)