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) {
vector<string> simplePath;
auto last = path.end();
for (auto i = path.begin(); i != last; ) {
i++;
auto j = find(i, last, '/');
auto tmp = string(i,j);
if (!tmp.empty() && tmp != ".") {
if (tmp == "..") {
if (!simplePath.empty()) {
simplePath.pop_back();
}
} else {
simplePath.push_back(tmp);
}
}
i = j;
}
string res ;
if (simplePath.empty()) {
return "/";
}
for (auto i : simplePath) {
res += "/" + i;
}
return res;
}
};