将路径字符串转真实绝对路径(双端队列的运用)——71. 简化路径

题目


OJ平台

题目详解

题意:外界传过来一个unix风格代表路径的字符串,我们需要改为真实的路径字符串。具体而言就是需要把 / 内的 .. 或者 . 转为它的具体作用->回到上一级和保持当前目录。题目还规定了多个 / 代表的始终是一个 / 的效果,而两个以上的 . 就是普通的路径名字了。

根据题意,我们可以把真实路径获取转化为一个入栈的过程,而遇到 .. 就出栈,遇到 . 则原地不动,其他情况入栈即可。最后再从头到尾用 / 相连成串。

解题代码

class Solution {
public:
//TODO 这是一个双端队列的利用题
//题目对路径描述的更新,正好符合入栈的性质。而最后拼接成字符串,正好符合队列的顺序。
    string simplifyPath(string path) {
        char* cstr = (char*)path.c_str();//TODO 得到C风格字符串,方便调用strtok
        char* part = strtok(cstr,"/");   //TODO 得到分割的部分字符串
        deque<string>St;                 //TODO 将被 "/" 的按照一定规则内容存下来:遇到'..'pop,遇到'.'则原地不动,其余情况均入栈。 
        while(part!=NULL){
            if(!strcmp(part,"..")){
                if(!St.empty())
                St.pop_back();
            }
            else if(!strcmp(part,"."))
                void(0);
            else{
                St.push_back(string(part));
            }
            part = strtok(NULL,"/");
        }
        string ret;
        while(!St.empty()){//TODO 从头读取到尾,队列的方式读取
            ret += '/'+move(St.front());//通过move转右值防止中间过程拷贝消耗额外内存
            St.pop_front();
        }
        return ret.empty()?"/":ret;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值