解题 的思路是 先化简 解决下列问题: 1、路径中出现相邻的/ 大于等于两个/改为1个/即可 2、/./表示当前目录,没有意义,换为/ 3、在开头进行/…/上翻目录,没有意义,删除/…,直到开头不再是/…/ 4、然后此时可以判断 如果是最简情况 直接返回即可 此后,需要做的,是模拟我们平时打开关闭路径的方式 设计一个栈(假设你先打开a目录,再打开a中的b,则此时你在b,若此时有/…/,则你是回到b的上级,这不就是出栈吗), 进入新目录就入栈,有/…/且栈不空就出栈
class Solution: def simplifyPath(self, path: str) -> str: while '//' in path: path = path.replace("//",'/') while '/./' in path: path = path.replace('/./','/') while path[:4] == '/../': path = '/' + path[4:] if path == '/' or path == '/.': return '/' loc = [] start = 1 print(path) path += '/' for i in range(1,len(path)): if path[i] == '/': this_str = path[start:i] start = i + 1 if this_str == '..' and loc != []: loc.pop(-1) elif this_str == '..': pass else: loc.append(this_str) res = '/' print(loc) if loc == []: return res #else: for i,x in enumerate(loc): if x == '.': continue res += x if i != len(loc) - 1:res += '/' if len(res) > 1 and res[-1] == '/': res = res[:-1] return res