[leetcode]71. Simplify Path

本文介绍了一种简化Unix风格绝对路径的方法,通过使用栈来处理特殊路径符号如'..'和'.',实现了路径的有效简化。

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

题目链接:https://leetcode.com/problems/simplify-path/#/description

Given an absolute path for a file (Unix-style), simplify it.

For example,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"


思路:

这道题的要求是简化一个Unix风格下的文件的绝对路径。

字符串处理,由于".."是返回上级目录(如果是根目录则不处理),因此可以考虑用栈记录路径名,以便于处理。需要注意几个细节:

  1. 重复连续出现的'/',只按1个处理,即跳过重复连续出现的'/';
  2. 如果路径名是".",则不处理;
  3. 如果路径名是"..",则需要弹栈,如果栈为空,则不做处理;
  4. 如果路径名为其他字符串,入栈。

最后,再逐个取出栈中元素(即已保存的路径名),用'/'分隔并连接起来,不过要注意顺序呦。

时间复杂度:O(n)

空间复杂度:O(n)


class Solution{
public:
    string simplifyPath(string path)
    {
        stack<string> sta;
        for(int i=0;i<path.length();)
        {
            while(i<path.length() && path[i]=='/') i++;
            string s="";
            while(i<path.length() && path[i]!='/')
                s+=path[i++];
            if(s==".." && !sta.empty())
                sta.pop();
            else if(s!="" && s!="." && s!="..")
                sta.push(s);
        }
        if(sta.empty())
            return "/";
        string s="";
        while(!sta.empty())
        {
            s="/"+sta.top()+s;
            sta.pop();
        }
        return s;
    }
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值