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


    643. 最长绝对文件路径

    中文English

    假设我们通过以下的方式用字符串来抽象我们的文件系统:
    字符串"dir subdir1 subdir2 file.ext"代表了:

    dir
    	subdir1
    	subdir2
    		file.ext
    

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

    "dir
    	subdir1
    		file1.ext
    		subsubdir1
    	subdir2
    		subsubdir2
    			file2.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
    	subdir1
    	subdir2
    		file.ext"
    输出:20
    解释:详见问题描述。
    

    样例2

    输入:"dir
    	subdir1
    		file1.ext
    		subsubdir1
    	subdir2
    		subsubdir2
    			file2.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 '
    ' not in input: return 0 
            
            path = []
            max_len = 0 
            rows = input.split('
    ')
            pre_level = -1
            
            for row in rows:
                file_name = row.strip('	')
                
                level = (len(row) - len(file_name)) // len('	')
                #等于0的情况,针对的是只有文件夹,dir
    dir1
                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     
            
  • 相关阅读:
    Android应用程序组件Content Provider简要介绍和学习计划
    本人其它博客
    Android应用程序组件Content Provider的启动过程源代码分析
    Android应用程序组件Content Provider应用实例
    Team Foundation Server 2010 Performance Tuning – Lessons learned
    Katapult:KDE 桌面辅佐序次
    Informix IDS 11系统打点(918考试)认证指南,第2局部系统活动监督(3)
    Amarok 1.4.6
    Informix IDS 11琐细管理(918测验)认证指南,第1部分IDS安设和设置(1)
    KTorrent 2.2 公布
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13619576.html
Copyright © 2020-2023  润新知