71简化路径

71简化路径

勉强把题目看懂了。。

但是还得看题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Solution {
public:
string simplifyPath(string path) {
//先让path加上一个/,方便判断而且最后不会计算在内
path+='/';
stack<string> temp_stack;
string temp_string;
for(auto c:path){
//两个'/'之间为单级目录子串
if(c=='/'){
//地址从前向后跳转,如两个'/'之间的地址字符串是“..”,切换上一级目录,即将最后压入的一级目录弹出
if(temp_string==".."){
if(!temp_stack.empty()) temp_stack.pop();
//考虑特殊情况,如果前面没有进入子目录,一开始就是"..",此时既不能压入栈也无法弹出,需要排除,不做操作即可
}
//其他情况,如两个'/'之间的地址字符串存在,且不为'.'(同级目录,无变化),必为字母组成的地址,因此压入栈
else if (temp_string!="." && !temp_string.empty()){
temp_stack.push(temp_string);
}
//清空单级目录字符串,准备记录下两个'/'之间的目录字符串
temp_string.clear();
}
//记录单级目录字符串
else{
temp_string.push_back(c);
}
}
//从栈中取出各级目录子串,加上'/'形成完整地址
string result;
while(!temp_stack.empty()){
result='/'+temp_stack.top()+result;
temp_stack.pop();
}
//特殊情况,栈中无元素,没有扫描到有效地址,则返回'/'
if(result.empty()) result="/";
return result;
}
};
  • 这样的话,如果是/./那么其实什么事情都不用干,如果有多个/,那么后面的/也没用
-------------本文结束,感谢您的阅读-------------