一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第24天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 本题给出一个代表文件系统目录结构的字符串input。
input可能包含小写或大写的英文字母,一个换行符'\n',一个制表符'\t',一个点'.',一个空格' ',和数字。- input字符串长度在1~10^4范围
二、思路分析:
今天的题目内容描述一眼看去好多内容,看来又要来锻炼一下生锈的脑袋啦。打起精神,认真地读完题目是关于文件管理目录类型的题。
题目要求我们找到包含文件的目录路径,并返回最长的路径长度。每一个文件都有一个唯一的绝对路径。
- 每个目录名由字母、数字和/或空格组成
- 每个文件名遵循
name.extension的格式 - 目录组成中包含 \n 和 \t 两种字符来组成
我们来看一个题目示例1,如图所示:
- 每一个目录:可以通过 \n 字符来划分
- 每一个层级数量:可以通过 \t 字符来计算
- 比如 file.ext 文件因为包含两个 \t 字符,所以其所在第层级下
通过示例1,我们找到文件管理路径规律,解答该题就用模拟的方法来解答:
- 首先通过字符串split()方法,通过 \n 字符进行划分得到一个 paths 列表
- 定义一个临时字典levelmap,key 值来存储 \t 字符数量 level,value 存储去掉 \t 的目录或文件名字长度level_len
- 每当遍历求出的路径 levelmap[level] 长度等于前面已经遍历路径和 levelmap[level] = levelmap[level-1] + level_len
- 取出文件所在绝对路径拼接是需要添加 / 字符,该斜杠字符数量与level一致,因此可以level数来代替
- 当遍历找到包含"."的字符串时,res会取最大值 max(res,levelmap[level] + level)
根据以上思路,我们用Python很容易实现,代码如下:
class Solution(object):
def lengthLongestPath(self, input):
res = 0
paths = input.split("\n")
levelmap = {-1:0}
for path in paths:
level = path.count("\t")
level_len = len(path) -level
levelmap[level] = levelmap[level-1] + level_len
if path.count("."):
res = max(res,levelmap[level]+level)
return res
三、总结:
本题主要考察的是模拟文件目录查找文件,通过字典或者数组来建立层级的映射关系,AC记录如下:
时间复杂度O(n),需要遍历input字符串
空间复杂度O(n),需要定义字典来存储深度
以上是本期内容,欢迎大佬们点赞评论,下期见~~~