[LeetCode] 71. Simplify Path
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = “/home/”, => “/home”
path = “/a/./b/../../c/”, => “/c”
Corner Cases:
- Did you consider the case where path = “/../”? In this case, you
should return “/”. - Another corner case is the path might contain multiple slashes ‘/’
together, such as “/home//foo/”. - In this case, you should ignore redundant slashes and return
“/home/foo”.
分析文件路径,其实通过’/’就是分割字符串,’/’之间的字符串分三种情况:
- s == “..”, 保存文件路径的栈的栈顶出栈。
- s == “.”, 什么都不做。
- s == 其他, 压栈。
class Solution {
public:
string simplifyPath(string path) {
vector<string> p;
int len = path.length();
string s = "";
for (int i=0; i<len; ++i) {
if (path[i] == '/') {
if (s == "..") {
if (!p.empty()) {
p.pop_back();
}
} else if (s != "." && s != "") {
p.push_back(s);
}
s = "";
} else {
s += path[i];
}
}
if (s == "..") {
if (!p.empty()) {
p.pop_back();
}
} else if (s != "." && s != "") {
p.push_back(s);
}
string res = "";
int psize = p.size();
for (int i=0; i<psize; ++i) {
res += "/" + p[i];
}
return res == "" ? "/" : res;
}
};