Leetcode 388. 文件的最长绝对路径
本文最后更新于228 天前,其中的信息可能已经过时,如有错误请发送邮件到2446865563@qq.com

1.题目基本信息

1.1.题目描述

假设有一个同时存储文件和目录的文件系统。

这里将 dir 作为根目录中的唯一目录。dir 包含两个子目录 subdir1 和 subdir2 。subdir1 包含文件 file1.ext 和子目录 subsubdir1;subdir2 包含子目录 subsubdir2,该子目录下包含文件 file2.ext 。

在文本格式中,如下所示(⟶表示制表符):

dir

-> subdir1

-> -> file1.ext

-> -> subsubdir1

-> subdir2

-> -> subsubdir2

-> -> -> file2.ext

如果是代码表示,上面的文件系统可以写为 "dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext" 。'\n' 和 '\t' 分别是换行符和制表符。

文件系统中的每个文件和文件夹都有一个唯一的 绝对路径 ,即必须打开才能到达文件/目录所在位置的目录顺序,所有路径用 '/' 连接。上面例子中,指向 file2.ext 的 绝对路径 是 "dir/subdir2/subsubdir2/file2.ext" 。每个目录名由字母、数字和/或空格组成,每个文件名遵循 name.extension 的格式,其中 name 和 extension由字母、数字和/或空格组成。

给定一个以上述格式表示文件系统的字符串 input ,返回文件系统中 指向 文件 的 最长绝对路径 的长度 。 如果系统中没有文件,返回 0。

1.2.题目地址

https://leetcode.cn/problems/longest-absolute-file-path/description/

2.解题方法

2.1.解题思路

栈+遍历

2.2.解题步骤

第一步,构建维护变量。stack的栈顶维护当前遍历字符所在路径的父路径的长度

第二步,遍历字符串,更新维护变量

  • 2.1.统计\t的个数,表示当前路径所在的层级

  • 2.2.计算当前的路径名长度,并识别当前路径是否为文件

  • 2.3.根据当前路径所在的层级,移除栈顶直到栈顶为当前路径名的父路径名

  • 2.4.更新维护变量。将当前路径长度添加到栈顶;如果当前路径是文件,则更新结果变量

第三步,返回结果

3.解题代码

python代码

class Solution:
    def lengthLongestPath(self, input: str) -> int:
        # 思路:栈
        n = len(input)
        # 第一步,构建维护变量。stack的栈顶维护当前遍历字符所在路径的父路径的长度
        stack = []
        result = 0
        i = 0
        # 第二步,遍历字符串,更新维护变量
        while i < n:
            # 2.1.统计\t的个数,表示当前路径所在的层级
            k = 0
            while input[i] == "\t":
                i += 1
                k += 1
            # 2.2.计算当前的路径名长度,并识别当前路径是否为文件
            length = 0
            isFile = False
            while i < n and input[i] != "\n":
                if input[i] == ".":
                    isFile = True
                i += 1
                length += 1
            # 2.3.根据当前路径所在的层级,移除栈顶直到栈顶为当前路径名的父路径名
            while len(stack) > k:
                stack.pop()
            # 2.4.更新维护变量。将当前路径长度添加到栈顶;如果当前路径是文件,则更新结果变量
            if stack:
                length += 1
                stack.append(stack[-1] + length)
            else:
                stack.append(length)
            if isFile:
                result = max(result, stack[-1])
            i += 1
        # 第三步,返回结果
        return result

c++代码

class Solution {
public:
    int lengthLongestPath(string input) {
        int n = input.size();
        stack<int> st;
        int result = 0;
        int i = 0;
        while (i < n) {
            int k = 0;
            while (i < n && input[i] == '\t') {
                i++; k++;
            }
            int length = 0;
            bool isFile = false;
            while (i < n && input[i] != '\n') {
                if (input[i] == '.') {
                    isFile = true;
                }
                i++; length++;
            }
            while (st.size() > k) {
                st.pop();
            }
            if (!st.empty()) {
                length++;
                st.push(st.top() + length);
            } else {
                st.push(length);
            }
            if (isFile) {
                result = max(result, st.top());
            }
            i++;
        }
        return result;
    }
};

4.执行结果

觉得有帮助可以投喂下博主哦~感谢!

作者:geek007

转载请注明文章地址及作者哦~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇