假设文件系统如下图所示:
这里将 dir 作为根目录中的唯一目录。dir 包含两个子目录 subdir1 和 subdir2 。subdir1 包含文件 file1.ext 和子目录 subsubdir1;subdir2 包含子目录 subsubdir2,该子目录下包含文件 file2.ext 。
在文本格式中,如下所示(⟶表示制表符):
dir
⟶ subdir1
⟶ ⟶ file1.ext
⟶ ⟶ subsubdir1
⟶ subdir2
⟶ ⟶ subsubdir2
⟶ ⟶ ⟶ file2.ext
如果是代码表示,上面的文件系统可以写为 "dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext" 。'\n' 和 '\t' 分别是换行符和制表符。
文件系统中的每个文件和文件夹都有一个唯一的 绝对路径 ,即必须打开才能到达文件/目录所在位置的目录顺序,所有路径用 '/' 连接。上面例子中,指向 file2.ext 的绝对路径是 "dir/subdir2/subsubdir2/file2.ext" 。每个目录名由字母、数字和/或空格组成,每个文件名遵循 name.extension 的格式,其中名称和扩展名由字母、数字和/或空格组成。
给定一个以上述格式表示文件系统的字符串 input ,返回文件系统中 指向文件的最长绝对路径 的长度。 如果系统中没有文件,返回 0。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-absolute-file-path
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution: def lengthLongestPath(self, input: str) -> int: n_path = input.split('\n') t_str = '\t' path_num = [] file_path = [] for i in range(len(n_path)): num_t = n_path[i].count(t_str) n_path[i] = n_path[i].replace(t_str, '')#把第i个位置如果出现\T就给替换掉 path_num.append(num_t)#把\t的数量加入 for i in range(len(n_path)): if '.' in n_path[i]:#带点的就是最后的文件 file = n_path[i]#先存下文件名 p = path_num[i]#找到文件名的这里有几个t,它之前的路径肯定是比它少,而且每个都比他少 while i > 0: if path_num[i - 1] == p - 1:#找到前一个比他少的t才替换路径 file = n_path[i - 1] + '/' + file#替换路径 p = p - 1#数量减少 i -= 1#再看前一个的 file_path.append(file) if not file_path: return 0 max = 0 for i in range(len(file_path)):#返回长度,只有长度大于0才返回长度,否则就是0 if len(file_path[i]) > max: max = len(file_path[i]) return max