71. Simplify Path
程序员文章站
2022-03-05 11:38:05
...
这道题要求简化给定的路径。
我用了栈,用vector也可以,要注意有多个/连续出现的情况,所以要跳过多余的/,然后把/之间的路径名称提出来,如果是.,不做处理,如果是..,把栈最上面的弹出来。否则就入栈。遍历完了之后,如果栈为空,返回/即可,如果栈不为空,把路径输出来。注意有一个用例是/../,这个应该返回/
class Solution {
public:
string simplifyPath(string path) {
stack<string> s;
int start = 0;
while(start < path.size()){
string part;
while(start < path.size() && path[start] == '/') start++;
if(start == path.size()) break;
int end = start;
while(end < path.size() && path[end] != '/') end++;
end = end-1;
part = path.substr(start, end - start + 1);
if(part == ".."){
if(!s.empty()) s.pop();
}else if(part != "."){
s.push(part);
}
cout << part << endl;
start = end + 1;
}
string res;
if(s.empty())
res = "/";
while(!s.empty()){
res = "/" + s.top() + res;
s.pop();
}
return res;
}
};
//测试用例/../
//测试用例"/JD/nA/./tXa/./././DFaiU/l/..///../nPwm"