题目如下:

Suppose we abstract our file system by a string in the following manner:

The string "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext"represents:

dir
subdir1
subdir2
file.ext

The directory dir contains an empty sub-directory subdir1 and a sub-directory subdir2 containing a file file.ext.

The string "dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"represents:

dir
subdir1
file1.ext
subsubdir1
subdir2
subsubdir2
file2.ext

The directory dir contains two sub-directories subdir1 and subdir2subdir1 contains a file file1.ext and an empty second-level sub-directory subsubdir1subdir2 contains a second-level sub-directory subsubdir2 containing a file file2.ext.

We are interested in finding the longest (number of characters) absolute path to a file within our file system. For example, in the second example above, the longest absolute path is "dir/subdir2/subsubdir2/file2.ext", and its length is 32 (not including the double quotes).

Given a string representing the file system in the above format, return the length of the longest absolute path to file in the abstracted file system. If there is no file in the system, return 0.

Note:

  • The name of a file contains at least a . and an extension.
  • The name of a directory or sub-directory will not contain a ..

Time complexity required: O(n) where n is the size of the input string.

Notice that a/aa/aaa/file1.txt is not the longest file path, if there is another path aaaaaaaaaaaaaaaaaaaaa/sth.png.

解题思路:我的方法很简单,首先把input按'\n'分割,接下来判断分割后的每一个子串前缀有几个'\t',并以'\t'的个数作为key值将子串存入字典中,而这个子串的上一级目录是(key-1)在字典中的最后一个元素。遍历所有的子串后即可求得最大长度。

代码如下:

class Solution(object):
def lengthLongestPath(self, input):
"""
:type input: str
:rtype: int
"""
#print input
dic = {}
dic[0] = ['']
res = 0
if input.count('.') < 1:
return 0
itemlist = input.split('\n')
for i in itemlist:
count = i.count('\t') + 1
if count not in dic:
dic[count] = [dic[count-1][-1] + '/' + i.replace('\t','')]
else:
dic[count].append(dic[count-1][-1]+ '/'+i.replace('\t',''))
#print len(dic[count][-1])-1,dic[count][-1]
if dic[count][-1].count('.') >= 1:
res = max(res,len(dic[count][-1])-1)
#print dic
return res

最新文章

  1. svn中第一次check out working copy项目下来出现 ld: library not found for -lcrypto clang: error: linker command failed with exit code 1 (use -v to see invocation)
  2. .NET工程师技术进阶
  3. Unity Built-in Shader详解二
  4. 给IT新男的15点建议:苦逼程序员的辛酸反省与总结
  5. xcode 4 安装cocos2d-x 2.1.4
  6. vim代码折叠功能
  7. Linux 让进程在后台可靠运行的几种方法
  8. Minix3信号处理分析
  9. 配置python虚拟环境Virtualenv及pyenv
  10. 我的PCB电路设计(一)
  11. FTP方式部署Azure Web App
  12. 新手学习之浅析一下c/c++中的指针
  13. NetCore开源项目集合
  14. 安装docker跨主机网络flannel
  15. Redis-五种数据类型解析
  16. zabbix创建触发器
  17. docker动态添加磁盘
  18. javaweb 压缩文件图片
  19. Oracle索引以及索引碎片
  20. mysql 数据库导入数据报错MySQL server has gone away解决办法

热门文章

  1. shell 中| 用法
  2. 【leetcode】207. Course Schedule
  3. 【leetcode】982. Triples with Bitwise AND Equal To Zero
  4. CKEditor的使用经历总结
  5. 「SCOI2016」背单词
  6. ZROI week6
  7. python 国内镜像加速
  8. VMware 虚拟机NAT模式如何设置网络连接,从头到尾全过程~!!
  9. ajax请求在参数中添加时间戳
  10. Micro SQL Server2016