算法课第十一周作业 | Longest Consecutive Sequence

本文介绍如何利用深度优先搜索算法解决LeetCode第388题——找到最长的绝对文件路径。通过建立哈希表存储深度与路径长度的关系,遍历字符串中的回车和空格,区分文件和文件夹,更新最长路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:

选取题目388,采用深度优先搜索解决问题。



题意解读:这道题给了我们一个字符串,里面包含\n和\t这种表示回车和空格的特殊字符,让我们找到某一个最长的绝对文件路径。



解题思路:可以用哈希表来建立深度和当前深度的绝对路径长度之间的映射,那么当前深度下的文件的绝对路径就是文件名长度加上哈希表中当前深度对应的长度,我们的思路是遍历整个字符串,遇到\n或者\t就停下来,然后我们判断,如果遇到的是回车,我们把这段文件名提取出来,如果里面包含'.',说明是文件,我们更新res长度,如果不包含点,说明是文件夹,我们深度level自增1,然后建立当前深度和总长度之间的映射,然后我们将深度level重置为0。之前如果遇到的是空格\t,那么我们深度加一,通过累加\t的个数,我们可以得知当前文件或文件夹的深度,然后做对应的处理。


代码:

class Solution {
public:
    int lengthLongestPath(string input) {
        int res = 0, n = input.size(), level = 0;
        unordered_map<int, int> m {{0, 0}};
        for (int i = 0; i < n; ++i) {
            int start = i;
            while (i < n && input[i] != '\n' && input[i] != '\t') ++i;
            if (i >= n || input[i] == '\n') {
                string t = input.substr(start, i - start);
                if (t.find('.') != string::npos) {
                    res = max(res, m[level] + (int)t.size());
                } else {
                    ++level;
                    m[level] = m[level - 1] + (int)t.size() + 1;
                }
                level = 0;
            } else {
                ++level;
            }
        }
        return res;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值