【LeetCode】388. 文件的最长绝对路径

142 阅读2分钟

image.png

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第24天,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

image.png

  • 题目示例

image.png

  • 题目解析

    • 本题给出一个代表文件系统目录结构的字符串input。
    • input 可能包含小写或大写的英文字母,一个换行符 '\n',一个制表符 '\t',一个点 '.',一个空格 ' ',和数字。
    • input字符串长度在1~10^4范围

二、思路分析:

今天的题目内容描述一眼看去好多内容,看来又要来锻炼一下生锈的脑袋啦。打起精神,认真地读完题目是关于文件管理目录类型的题。

题目要求我们找到包含文件的目录路径,并返回最长的路径长度。每一个文件都有一个唯一的绝对路径。

  • 每个目录名由字母、数字和/或空格组成
  • 每个文件名遵循 name.extension 的格式
  • 目录组成中包含 \n 和 \t 两种字符来组成

我们来看一个题目示例1,如图所示:

  • 每一个目录:可以通过 \n 字符来划分
  • 每一个层级数量:可以通过 \t 字符来计算
  • 比如 file.ext 文件因为包含两个 \t 字符,所以其所在第层级下

image.png

通过示例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)

image.png

根据以上思路,我们用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记录如下:

image.png

时间复杂度O(n),需要遍历input字符串

空间复杂度O(n),需要定义字典来存储深度

以上是本期内容,欢迎大佬们点赞评论,下期见~~~