模拟题,根据题目直接设计即可
class Solution {
public:
string simplifyPath(string path) {
stack<string> stk;
string ans;
string temp;
//因为程序只有在遇到/时会处理,这里解决/..这样的case
path = path + "/";
for(char c : path){
if(c == '/'){
//遇到/时说明两个/之间的字符拼接完成,这里进行处理
if(stk.empty()){
//第一个
stk.push("/");
}else{
//联续的/
if(temp == "" && stk.top() == "/") continue;
//处理..
if(temp == ".."){
if(stk.size() > 1){
stk.pop();stk.pop();
}
}else if(temp != "."){
//处理正常的目录
stk.push(temp);
stk.push("/");
}
temp = "";
}
}else{
//拼接两个/直接的字符
temp.push_back(c);
}
}
//拼接字符串
while(!stk.empty()){
ans = stk.top() + ans;
stk.pop();
}
//处理最后多余的/
if(ans.length() != 1 && ans[ans.length()-1] == '/') ans.pop_back();
return ans;
}
};