难度:中等
题目描述:
思路总结:题解一用到了栈,存当前目录的所有层级的名字,然后每次遇到文件类型计算当前最长的路径。具体步骤都在注释中写的很详细。有时间可以做一下不用栈的方法,不过当前的核心任务还是理解并使用栈。
题解一:
class Solution:
def lengthLongestPath(self, input: str) -> int:
#梳理一下思路:我们为每个目录/文件添加一个对应的\t数,然后遍历每个D/F,如果是文件,就计算当前最长和历史最长。(长度计算方法就是计算我们当前栈的大小)
def cal_len(stack):
s = stack.copy()
length = 0
while s:
t = s.pop()
length += len(t[0]) + 1 #每个目录和文件加一个/
return length-1 #减掉最后的一个/
stack = []
paths = input.split('\n')
tmp = []
for s in paths:
num = s.count('\t')
tmp.append((s[num:], num))
max_len = 0
for t in tmp:
#先把栈顶的所有\t个数比当前大的弹出,也就是目录更深的弹出,回到当前所在目录
while stack and stack[-1][1] >= t[1]: #这里stack[-1]相当于stack.top()
stack.pop()
stack.append(t)
if '.' in t[0]:
max_len = max(max_len, cal_len(stack))
return max_len
题解一结果: