Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/"
, => "/home"
path = "/a/./b/../../c/"
, => "/c"
本题简单来说 就是字符串的处理 同时要有相关的情况分类 比如当前目录 父目录 多个斜线等
但其实 就父目录时需要回到上一路经 当前目录时不做任何变化 其他目录时需要进入其他目录 这一特征 本题可用栈来存储整个路径寻找的过程
在path中 逐一找到斜线之间的当前路径名 并分类判断 分类处理 使得栈中存储的为路径的一系列名字 最后再反向串起来成路径真正的字符串即可。
class Solution {
public:
string simplifyPath(string path) {
string res_path="";
if (path.size()==0)
return res_path;
stack<string> stack_path;
for (int i=0; i<path.size();)
{
while(i<path.size() && path[i]=='/')
++i;
string name="";
while(i<path.size() && path[i]!='/')
name += path[i++];
if (name==".." && !stack_path.empty())
stack_path.pop();
else if(name!="" && name!="." && name!="..")
stack_path.push(name);
}
if (stack_path.empty())
res_path += '/';
else
{
while(!stack_path.empty())
{
res_path = '/'+stack_path.top()+res_path;
stack_path.pop();
}
}
return res_path;
}
};