每日一题力扣388

假设文件系统如下图所示:

这里将 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
原文地址:https://www.cnblogs.com/liuxiangyan/p/14548735.html