一.题目:
给出了一个字符串表示的文件夹目录,现在需要求出最长的文件路径。文件的深度有\t个数标识,文件夹开始和终止有\n标识,有.的是文件否则是文件夹。注意文件路径长度是指拼成的绝对地址的长度,包括切割符/。
Example:
Input: s = "dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"
Return: 32
Eaplanation: "dir/subdir2/subsubdir2/file2.ext"
二.解题思路:
首先我们肯定需要将这么一大串的输入字符串分解,也就是
inputs = input.split("\n")
然后我们需要建立一个栈并进行更新和维护,栈中的每个元素表示对应的目录深度和到该目录为止的绝对地址长度.然后根据是否含有".“判断该部分是属于文件夹还是文件,若是文件夹则记录该部分的”\t"个数来确定深度更新栈.
代码如下:
class Solution(object):
def lengthLongestPath(self, input):
"""
:type input: str
:rtype: int
"""
inputs = input.split("\n")
stack = [(-1,0)]
max_len = 0
for sub_str in inputs:
depth = sub_str.count("\t")
sub_str = sub_str.replace("\t","")
while depth <= stack[-1][0]:
stack.pop()
if "." not in sub_str:
stack.append((depth, len(sub_str) + 1 + stack[-1][1]))
else:
max_len = max(max_len,len(sub_str) + stack[-1][1])
return max_len