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

Posted C+++++++++++++++++++

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将路径字符串转真实绝对路径(双端队列的运用)——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;
    
;

以上是关于将路径字符串转真实绝对路径(双端队列的运用)——71. 简化路径的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题——简化路径#71#Medium

codeforces 1064D 双端队列BFS

Vue Router 相对路径转绝对路径

老革命老问题之相对路径转绝对路径

第24篇 collections模块 双端队列 命名元组 有序字典 默认字典

POJ 2451-半平面交