# 71. Simplify Path
90%,其实就是考察栈stack
的使用,当然最重要看懂题目,看不懂的切换成中文。题意和思路分析如下:
- 将绝对路径转化成规范的路径
- 输出的时候每个目录之间只能相隔一道
/
,且开头必有一道/
;如果有一层以上的目录的话,结尾必没有/
.
表示上一层目录保留,且这个效果不累加,所以碰到这个直接continue;
..
表示上一层目录不保留,且这个效果要累加,也就是如果有两个..
,需要往上去掉两层目录,所以碰到这个也是continue;
,但是要进行计数,便于累加效果- 所以采用栈进行储存很方便,栈空的时候不管
..
效果累加多少层都不用管了 具体思路见代码。
class Solution {
public:
string simplifyPath(string path) {
stack<string> s1, s2;
string word;
for (char ch : path) {
if (ch == '/') {
if (!word.empty()) {
s1.push(word);
word.clear();
}
continue;
} else word.push_back(ch);
}
if (!word.empty()) s1.push(word);
int cnt = 0;
while (!s1.empty()) {
word = s1.top();
s1.pop();
if (word == ".")
continue;
else if (word == "..")
cnt++;
else {
if (cnt == 0)
s2.push(word);
else cnt--;
}
}
string ans;
ans.push_back('/');
while(!s2.empty()) {
ans += s2.top();
s2.pop();
if (!s2.empty()) ans.push_back('/');
}
return ans;
}
};