給定 Unix 風格絕對路徑,簡化為標準規範路徑:
. 表示當前目錄.. 表示上級目錄(根目錄的上級仍是根目錄)/ 視為單個分隔符範例:
輸入: "/a/./b/../../c/"
輸出: "/c"
輸入: "/home/" → "/home"
輸入: "/../../" → "/"
/ 分割路徑字符串.:忽略..:棧非空時彈出(回到上級)/ 連接棧內元素時間複雜度:O(n),空間複雜度:O(n)。
class Solution:
def simplifyPath(self, path):
"""
:type path: str
:rtype: str
"""
parts = path.split('/')
stack = [''] # 棧底放空串代表根目錄 "/"
for part in parts:
if not part or part == '.':
continue
elif part == '..':
if len(stack) > 1: # 保留根目錄
stack.pop()
else:
stack.append(part)
if len(stack) == 1:
return '/'
return '/'.join(stack)
# 測試
if __name__ == "__main__":
sol = Solution()
assert sol.simplifyPath("/a/./b/../../c/") == '/c'
assert sol.simplifyPath("/home/") == "/home"
assert sol.simplifyPath("/../../") == "/"
assert sol.simplifyPath("/../") == "/"
assert sol.simplifyPath("/a//b////c/d//././/..") == "/a/b/c"
print("所有測試通過")
join 自然生成 / 開頭split('/') 產生空串,統一忽略.. 超過根目錄停在根、空路徑返回 /路徑簡化是棧應用的教科書級範例,將字符串解析轉化為棧操作,邏輯清晰且易於擴展(如支持符號鏈接、權限檢查等)。