将路径字符串转真实绝对路径(双端队列的运用)——71. 简化路径
Posted C+++++++++++++++++++
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将路径字符串转真实绝对路径(双端队列的运用)——71. 简化路径相关的知识,希望对你有一定的参考价值。
题目
题目详解
题意:外界传过来一个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. 简化路径的主要内容,如果未能解决你的问题,请参考以下文章