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) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
deque<string> dq;
if(path.size() < 1){
return path;
}
if(path == "/"){
return path;
}
string ans;
if(path[0] == '/'){
ans = "/";
} else {
return "";
}
int i, j;
for(i = 1; i < path.size(); i++){
string tmp="";
for(j = i; j < path.size(); j++){
if(path[j]!= '/'){
tmp += path[j];
} else {
break;
}
}
if(tmp == ""){
i = j;
} else if(tmp == "."){
i = j;
} else if(tmp == ".."){
if(!dq.empty()){
dq.pop_back();
}
i = j;
} else {
dq.push_back(tmp);
i = j;
}
}
ans = "/";
int first = true;
while(!dq.empty()){
if(first){
first =false;
} else {
ans+="/";
}
ans+=dq.front();
dq.pop_front();
}
return ans;
}
};