- 简化路径
- 用
/
对字符串进行分隔- 可以使用stringstream来分隔字符串,然后对每一段分别处理
- 继续讨论分隔后的元素。用一个向量保存有意义的子字符串
- 若为
""
或者.
,则直接忽略,用continue直接跳过 - 若为
..
且当前向量不为空,则pop出栈顶的一个元素(是..
时,代表回上一级目录,则把栈顶的元素出栈,表示删掉它上面挨着的一个路径) - 如果遇到不是点,也不是空格,不是回退到上一级目录,那么进栈
- 若为
比如输入”/../“ ,则分隔后内容为
..
, 此时保存元素的栈为空,这种情况也要直接忽略(不能入栈)。因此有else if (t != "..")
时,才能进行入栈操作:v.push_back(t)
。否则会出现:
class Solution {
public:
string simplifyPath(string path) {
string res, t;
stringstream ss(path);
vector <string> v;
while (getline(ss, t, '/')) {
if (t == "" || t == ".") continue;
if (t == ".." && !v.empty()) v.pop_back();
else if (t != "..") v.push_back(t);
}
for (string s : v) res += "/" + s;
return res.empty() ? "/" : res;
}
};