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里面,一开始我犯错误了

本文介绍了一个C++实现的算法,用于简化Unix风格的文件路径。该算法通过栈来处理路径中的'..'和'.',去除多余的斜杠,并返回规范化的路径。文章详细解释了如何处理各种特殊情况。

被折叠的 条评论
为什么被折叠?



