Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"
"/../"?"/".‘/‘ together,
such as "/home//foo/"."/home/foo".基本思路:
1. 以字符 / 作为分隔符,取子串。
2. 对 .. 作特殊处理。
3. 即不是. 又不是 .. 则存入栈中
4. 最后串接
所遇到的特殊case,
输入 /... (连着三个小数点)
期望输出 /.. (亦是连着三个小数点).
进入循环前,在path末尾添加 / , 作为哨兵,可简化代码。
class Solution {
public:
string simplifyPath(string path) {
vector<string> stack;
string name;
path.push_back('/');
for (int i=0; i<path.size(); i++) {
if (path[i] == '/') {
if (name == "..") {
if (!stack.empty()) stack.pop_back();
}
else if (name != "." && !name.empty())
stack.push_back(name);
name.clear();
}
else
name.push_back(path[i]);
}
if (stack.empty()) return "/";
string ans;
for (auto p: stack)
ans += "/" + p;
return ans;
}
};原文地址:http://blog.csdn.net/elton_xiao/article/details/44960521