2021-07-16 被代码暴揍的day8——简化路径 C++

该博客介绍了如何解决LeetCode上的简化路径问题,通过使用栈数据结构来处理路径中的'.'、'..'和冗余'/'.详细解析了代码实现过程,强调了处理细节和特殊情况。

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

leetcode-简化路径

题目要求

在这里插入图片描述

思路

对于这道题目,我们需要知道每一级路径是什么样的(即两个’/'符号之间的内容)。

  1. 如果是’.’,表示当前目录,这一级目录实际上什么用处也没有,需要排除。
  2. 如果是’…'表示上一级目录,那么就需要向上返回一级。
  3. 如果两个’/'连在一起,也是多余的,需要去掉。
  4. 另外就是将路径最后面的’/'去掉。

具体做法:

我们设定一个栈stack来存储当前的绝对路径,用一个字符串temp来存储临时的子路径名,然后从前到后遍历题目给出的绝对路径中的所有字符,不是’/‘时更新temp,即将当前字符加到temp后面,遇到’/‘符号时进行分情况讨论,如果temp是前两种情况那么什么都不用做,如果是’…’,便将栈顶出栈,而之后的栈顶就相当于回到了上一层文件夹,如果是文件夹名,入栈即可。

class Solution {
public:
    string simplifyPath(string path) {
        stack<string> paths; //栈,存储路径
        int q = 0; //用来遍历path
        string temp = ""; //存储单个的子路径
        while(q <= path.size())
        {
            //如果path[q]是‘/’或者q是path的长度(考虑到最后一个目录后面可能没有斜杠的情况)
            if(path[q] == '/' || q==path.size()) 
            {
                if(temp == "." || temp.size() == 0)
                { //前两种情况,什么都不做
                }
                else if(temp == "..")
                {
                    if(!paths.empty()) //处理“从根目录向上一级是不可行的”这种情况
                    paths.pop(); //上一个文件夹,即出栈
                }
                else
                {
                    paths.push(temp); //正常情况,文件夹入栈
                }
                temp = ""; //将temp置空重新开始
                q++;
            }
            else //将temp更新
            {
                temp += path[q];
                q++;
            }
        }
        string result = ""; 
        if(paths.empty()) //如果只剩个根文件夹,特判一下直接输出
        return "/";
        while(!paths.empty())
        {
            result = '/' + paths.top() + result; //从后往前,依此添加路径,因为以斜杠开头,所以..
            paths.pop();
        }
        return result;
    }
};

嘤嘤嘤~
这道题要考虑的细节好多,我是小辣鸡

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值