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"
.
class Solution {
public:
string simplifyPath(string path) {
string res = "";
stack<string> st;
int start = 0;
while (start < path.size()) {
while (start < path.size() && path[start] == '/') {
start++;
}
int end = start;
while (end < path.size() && path[end] != '/') {
end++;
}
string tmp = path.substr(start, end - start);
start = end + 1;
if (tmp == ".." && st.empty()) {
continue;
}
else if (tmp == ".." && !st.empty()) {
st.pop();
}
else if (tmp == "." || tmp == "") {
continue;
}
else {
st.push(tmp);
}
}
if (st.empty()) {
return "/";
}
while (!st.empty()) {
res = "/" + st.top() + res;
st.pop();
}
return res;
}
};
注意当str为空的时候,不要加入stack里面,一开始我犯错误了