【leetcode】71-简化路径【C/C++】

题目如下:

解题思路:

本题思路较为简单,采取入栈的方法。先只考虑"/"之间的字符串:

  • 当遇到不是"."".."时的字符串,则将当前元素入栈;
  • 当遇到".."且栈不为空时,则出栈顶部元素;
  • 其他情况不做处理。

问题的关键在于如何识别一个和多个"/",利用string流的办法,先把"/"替换成空格,之后将string绑定到一个istringstream中,通过类似 cin 的方法提取内容 while(cout >> string)

代码如下:

class Solution {
public:
    string simplifyPath(string path) {
        if(path == "/")
            return "/";
        //将字符串中的'/'替换为空格
        for(int i = 0; i < path.size(); i++){
            if(path[i] == '/')
                path[i] = ' ';
        }
        vector<string> stack;    //声明栈,存放两个'/'之间的字符串
        istringstream str(path); //声明并绑定一个输入流
        string buf;              //输入流读入的临时缓存
        while(str >> buf){
            if(buf == ".." && !stack.empty() ) //遇到".."且栈不为空则出栈
                stack.pop_back();
            else if(buf != "." && buf != "..") //不是"."和".."的字符串则入栈
                stack.push_back(buf);
        }
        if(stack.empty()) //简化结果为空则返回根目录
            return "/";
        string res;       //存放结果
        for(int i = 0; i < stack.size(); i++){
            res = res + "/" + stack[i];
        }
        return res;
    }
};
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值