这道提设计是思想就是模拟,先用一个输入流来判断路径中有没有多余的符号,同时将其中的转到上一层路径的符号跳出栈。
下面代码就是用栈来模拟具体的操作。
class Solution {
public:
string simplifyPath(string path) {
vector<string> v;
istringstream iss(path);//将其转化为输入流
string buf;
while(getline(iss,buf,'/')){//读入输入流
if(!buf.empty() && buf != "." && buf != ".."){
v.push_back(buf);
}else if(!v.empty() && buf == ".."){//当为..时,需要跳转到上一层
v.pop_back();
}
}
if(v.empty()){
return "/";
}
buf.clear();//清除buf内字符
for(string &s : v){
buf += "/";
buf += s;
}
return buf;
}
};