题目如下:
解题思路:
本题思路较为简单,采取入栈的方法。先只考虑"/"之间的字符串:
- 当遇到不是"."和".."时的字符串,则将当前元素入栈;
- 当遇到".."且栈不为空时,则出栈顶部元素;
- 其他情况不做处理。
问题的关键在于如何识别一个和多个"/",利用string流的办法,先把"/"替换成空格,之后将string绑定到一个istringstream中,通过类似 cin 的方法提取内容 while(cout >> string) 。
代码如下:
class Solution {
public:
string simplifyPath(string path) {
if(path == "/")
return "/";
//将字符串中的'/'替换为空格
for(int i = 0; i < path.size(); i++){
if(path[i] == '/')
path[i] = ' ';
}
vector<string> stack; //声明栈,存放两个'/'之间的字符串
istringstream str(path); //声明并绑定一个输入流
string buf; //输入流读入的临时缓存
while(str >> buf){
if(buf == ".." && !stack.empty() ) //遇到".."且栈不为空则出栈
stack.pop_back();
else if(buf != "." && buf != "..") //不是"."和".."的字符串则入栈
stack.push_back(buf);
}
if(stack.empty()) //简化结果为空则返回根目录
return "/";
string res; //存放结果
for(int i = 0; i < stack.size(); i++){
res = res + "/" + stack[i];
}
return res;
}
};