388. 文件的最长绝对路径(Python)

题目

难度:★★★☆☆
类型:数据结构
方法:考虑周全

传送门

假设我们以下述方式将我们的文件系统抽象成一个字符串:

字符串 "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext" 表示:

dir
subdir1
subdir2
file.ext
目录 dir 包含一个空的子目录 subdir1 和一个包含一个文件 file.ext 的子目录 subdir2 。

字符串 "dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext" 表示:

dir
subdir1
file1.ext
subsubdir1
subdir2
subsubdir2
file2.ext
目录 dir 包含两个子目录 subdir1 和 subdir2。 subdir1 包含一个文件 file1.ext 和一个空的二级子目录 subsubdir1。subdir2 包含一个二级子目录 subsubdir2 ,其中包含一个文件 file2.ext。

我们致力于寻找我们文件系统中文件的最长 (按字符的数量统计) 绝对路径。例如,在上述的第二个例子中,最长路径为 "dir/subdir2/subsubdir2/file2.ext",其长度为 32 (不包含双引号)。

给定一个以上述格式表示文件系统的字符串,返回文件系统中文件的最长绝对路径的长度。 如果系统中没有文件,返回 0。

说明:

文件名至少存在一个 . 和一个扩展名。
目录或者子目录的名字不能包含 .。
要求时间复杂度为 O(n) ,其中 n 是输入字符串的大小。

请注意,如果存在路径 aaaaaaaaaaaaaaaaaaaaa/sth.png 的话,那么 a/aa/aaa/file1.txt 就不是一个最长的路径。

解答

首先用\n将所有文件或文件夹分离,这样得到的列表中的每个元素中,通过“\t”的数量就能知道这个文件或文件夹的级别。

设置一个深度与路径长度的对应字典,每次遍历都更新当前的字典。至于如何判断一个路径末尾是不是文件,通过判断其中是否存在“.”就可以。

用一个变量统计当前最长路径,并作为结果返回。

class Solution:
    def lengthLongestPath(self, input: str) -> int:
        depth_dict = {0: 0}                                         # 深度与路径长度的对应字典
        max_dir_len = 0                                             # 最长的路径的长度,初始化为0
        for line in input.split("\n"):                              # 选取每一个路径
            depth = line.count('\t')                                # 计算当前路径深度,根据\t的数量就可以
            name = line.lstrip("\t")                                # 提取当前文件夹或文件的名称
            cur_dir_len = len(name) + depth_dict[depth]             # 计算当前文件夹或文件在内的路径长度
            if "." in name:                                         # 证实当前路径以文件结尾
                max_dir_len = max(max_dir_len, cur_dir_len)         # 更新最终结果
            else:                                                   # 证实当前路径以文件夹结尾
                depth_dict.update({depth + 1: cur_dir_len + 1})     # 更新深度与路径长度的对应字典
        return max_dir_len                                          # 返回结果

如有疑问或建议,欢迎评论区留言~

你可能感兴趣的:(388. 文件的最长绝对路径(Python))