643. 最长绝对文件路径(回顾)

643. 最长绝对文件路径

中文English

假设我们通过以下的方式用字符串来抽象我们的文件系统:
字符串"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 包含一个包含文件 file2.ext 的二级子目录 subsubdir2
我们有兴趣找到文件系统中文件的最长绝对路径(字符数)。例如,在上面的第二个例子中,最长的绝对路径是“dir/subdir2/subsubdir2/file2.ext”,其长度为 32 (不包括双引号)。
给定一个以上述格式表示文件系统的字符串,返回抽象文件系统中文件最长绝对路径的长度。如果系统中没有文件,则返回 0 。

样例

样例1

输入:"dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext"
输出:20
解释:详见问题描述。

样例2

输入:"dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"
输出:32
解释:详见问题描述。

注意事项

  • 一个文件的名称至少包含一个 . 和扩展名。
  • 目录或子目录的名称不会包含 . 。
  • 时间复杂度要求: O(n) 其中 n 是输入字符串的大小。
  • 请注意如果有另一条路径 aaaaaaaaaaaaaaaaaaaaa / sth.png 存在的话, a/aa/aaa/file1.txt 不是最长的文件路径。
输入测试数据 (每行一个参数)如何理解测试数据?
class Solution:
    """
    @param input: an abstract file system
    @return: return the length of the longest absolute path to file
    """
    def lengthLongestPath(self, input):
        # write your code here
        if '\n' not in input: return 0 
        
        path = []
        max_len = 0 
        rows = input.split('\n')
        pre_level = -1
        
        for row in rows:
            file_name = row.strip('\t')
            
            level = (len(row) - len(file_name)) // len('\t')
            #等于0的情况,针对的是只有文件夹,dir\ndir1
            if (level >= 0) and (level <= pre_level):
                for i in range(pre_level - level + 1):
                    path.pop()
            
            pre_level = level
            #先pop掉同级目录下面的,然后在append进来同级目录
            path.append(file_name)
            
            #最后取最大
            if ('.' in path[-1]):
                max_len = max(max_len, sum([len(v) for v in path]) + len(path) - 1)
            
        return max_len     
        

 

 

posted @ 2020-09-05 20:31  风不再来  阅读(218)  评论(0编辑  收藏  举报