最长绝对文件路径——算法面试刷题1(google),字符串处理,使用tree遍历dfs类似思路
假设我们通过以下的方式用字符串来抽象我们的文件系统:
字符串"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 。
- 一个文件的名称至少包含一个
.和扩展名。 - 目录或子目录的名称不会包含
.。 - 时间复杂度要求:
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
ans = 0
path = []
lines = input.split("\n")
for line in lines:
cnt = self.count_tab(line)
path_name = self.get_path_name(line)
if cnt < len(path):
path[cnt] = path_name
else:
path.append(path_name)
if self.is_file(path_name):
length = len("/".join(path[:cnt+1]))
if length > ans: ans = length
return ans def count_tab(self, s):
return s.count("\t") def get_path_name(self, s):
index = s.rfind("\t")
if index >= 0:
return s[index+1:] # +2 is error. \t is a char!!!
else:
return s def is_file(self, f):
return f.find(".") >= 0参考代码:
import re class Solution:
# @param {string} input an abstract file system
# @return {int} return the length of the longest absolute path to file
def lengthLongestPath(self, input):
# Write your code here
dict = collections.defaultdict(lambda: "")
lines = input.split("\n") n = len(lines)
result = 0
for i in xrange(n):
count = lines[i].count("\t") lines[i] = dict[count - 1] + re.sub("\\t+","/", lines[i])
if "." in lines[i]:
result = max(result, len(lines[i]))
dict[count] = lines[i] return result值得借鉴的地方:
1、re.sub() 替换连续\t为/
2、使用dict来存储路径长度
最长绝对文件路径——算法面试刷题1(google),字符串处理,使用tree遍历dfs类似思路的更多相关文章
- 有效的括号序列——算法面试刷题4(for google),考察stack
给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列. 括号必须依照 "()" 顺序表示, & ...
- 相似的RGB颜色——算法面试刷题3(for google),考察二分
在本题中,每个大写字母代表从“0”到“f”的一些十六进制数字. 红绿蓝三元色#AABBCC可以简写为#ABC. 例如,#15c是颜色#1155cc的简写. 现在,假设两种颜色#ABCDEF和#UVWX ...
- 回文的范围——算法面试刷题2(for google),考察前缀和
如果一个正整数的十进制表示(没有前导零)是一个回文字符串(一个前后读取相同的字符串),那么它就是回文.例如,数字5, 77, 363, 4884, 11111, 12121和349943都是回文. 如 ...
- 有效单词词广场——算法面试刷题5(for google),考察数学
给定一个单词序列,检查它是否构成一个有效单词广场.一个有效的单词广场应满足以下条件:对于满足0≤k<max(numRows numColumns)的k,第k行和第k列对应的字符串应该相同,. 给 ...
- 最长的文件路径 Longest Absolute File Path
2018-07-30 22:05:52 问题描述: 问题求解: 本题个人感觉还是挺有意思的,题目要求的是最长的文件路径,其实是需要keep tracking路径长度,如果出现文件则需要进行比较,看是否 ...
- 数据结构+算法面试100题~~~摘自CSDN
数据结构+算法面试100题~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树) 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调 ...
- 1、学习算法和刷题的框架思维——Go版
前情提示:Go语言学习者.本文参考https://labuladong.gitee.io/algo,代码自己参考抒写,若有不妥之处,感谢指正 关于golang算法文章,为了便于下载和整理,都已开源放在 ...
- 安利一个基于Spring Cloud 的面试刷题系统。面试、毕设、项目经验一网打尽
推荐: 接近100K star 的Java学习/面试指南 Github 95k+点赞的Java面试/学习手册.pdf 今天给小伙伴们推荐一个朋友开源的面试刷题系统. 这篇文章我会从系统架构设计层面详解 ...
- 算法笔记刷题1(codeup 1934)
准备6月份的拼题甲级中(本来现在这两天就考试了,但是因为疫情的原因延期了) 刚刚开始按算法笔记刷题,今天是探索codeup的第一天. 一开始并没有把多点测试当回事,直到一错再错,心态爆炸... 附上我 ...
随机推荐
- vue前端面试题知识点整理
vue前端面试题知识点整理 1. 说一下Vue的双向绑定数据的原理 vue 实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫 ...
- 创建我的vue项目
vue-cli 全局安装 1.命令行执行:npm install --global vue-cli: ------也可以用这个命令下载新版本 2.安装完成以后 可以输入命令 :vue 回车,可以看到针 ...
- golang 中strconv包用法
链接:https://studygolang.com/articles/5003 http://www.cnblogs.com/golove/p/3262925.html
- Automatically populating $HTTP_RAW_POST_DATA is deprecated......
Automatically populating $HTTP_RAW_POST_DATA is deprecated... 1 这个问题和PHP版本有关系,PHP 5.6已经废弃了$HTTP_RAW_ ...
- 关于Java多线程的一些常考知识点
前言 Java多线程也是面试中经常会提起到的一个点.面试官会问:实现多线程的两种方式以及区别,死锁发生的4个条件以及如何避免发生死锁,死锁和活锁的区别,常见的线程池以及区别,怎么理解有界队列与无界队列 ...
- CenOS 6.4下安装中文输入法
1.使用root登录 输入:yum install "@Chinese Support" 2.回到桌面设置添加输入法 参考链接:http://www.linuxidc.com/Li ...
- kNN算法基本原理与Python代码实践
kNN是一种常见的监督学习方法.工作机制简单:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k各训练样本,然后基于这k个“邻居”的信息来进行预测,通常,在分类任务中可使用“投票法”,即选择这k ...
- The application to execute does not exist: 'C:\Users\Administrator\.dotnet\tools\.store\dotnet-aspnet-codegenerator\2.2.0-rtm-35687\dotnet-aspnet-codegenerator\2.2.0-rtm-35687\tools\netcoreapp2.1\any\
vs code mvc搭建基架执行命令操作出现的问题解决方式重新复制拷贝一份2.2.0命名为2.2.0-rtm-35687, 修改
- 用redis构建分布式锁
单实例的实现 从2.6.12版本开始,redis为SET命令增加了一系列选项: EX seconds – 设置键key的过期时间,单位时秒 PX milliseconds – 设置键key的过期时间, ...
- Elasticsearch .net client NEST使用说明 2.x -更新版
Elasticsearch .net client NEST使用说明 目录: Elasticsearch .net client NEST 5.x 使用总结 elasticsearch_.net_cl ...