仅以此纪录每日LeetCode所刷题目。
题目描述:
示例:
思路:
这道题理解起来比较困难,但是读懂题意之后还是比较好写的,使用栈即可。首先对给出的path进行处理。
第一步先将"//"改写成"/",注意题目里面可能会出现“”这样的样例,因此我们不能使用if来判断,我们需要使用while循环,直到转化完全。因为我们输出结果的时候最后的字符不是"/",因此我们将最后的"/"删除。
第二步我们使用split函数,以"/"为分隔符将path分割。遍历分割后的各个元素,删除‘.’,之后使用栈,如果元素不是".."就进栈,遇到".."就将上一个元素出栈。
最后使用“/”来间隔栈内的元素,输出即可。
代码:
class Solution:
def simplifyPath(self, path: str) -> str:
list1 = []
while '//' in path :
path = path.replace('//','/')
if path[-1] == '/':
path = path[:-1]
list1 = path.split("/")[1:]
while '.' in list1:
list1.remove('.')
list2 = []
for i in range(len(list1)):
if list1[i] != '..':
list2.append(list1[i])
else:
if len(list2) != 0:
list2.pop()
str1 = '/'
for i in list2:
str1 += str(i+'/')
if len(str1) == 1:
return str1
else:
return str1[:-1]