LeetCode解题之Simplify Path
原题
化简Unix系统下一个文件的绝对路径。
注意点:
- 根文件夹的上层文件夹还是根文件夹
- 可能有多个分隔符同一时候使用
样例:
输入: path = “/a/./b/../../c/”
输出: “/c”
解题思路
用栈来处理,碰到有效字符就压栈。遇到上层文件夹字符”..”且栈不空时就弹出。
为了最后连接字符串时头上有根文件夹,在栈底加一个空字符。
AC源代码
class Solution(object):
def simplifyPath(self, path):
"""
:type path: str
:rtype: str
"""
parts = path.split("/")
result = ['']
for part in parts:
if part:
if part not in ('.', '..'):
if len(result) == 0:
result.append('')
result.append(part)
elif part == '..' and len(result) > 0:
result.pop()
if len(result) < 2:
return "/"
else:
return "/".join(result)
if __name__ == "__main__":
assert Solution().simplifyPath("/a/./b/../../c/") == '/c'
assert Solution().simplifyPath("/home/") == "/home"
assert Solution().simplifyPath("/../../") == "/"
欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源代码。