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) {
stack<string> r;
int len=path.size();
if(len==0)
return NULL;
int i=0;
while(i<len)
{
while(path[i]=='/'&&i<len)
i++;
string s;
while(path[i]!='/'&&i<len)
s+=path[i++];
if(s==".."&&!r.empty())
r.pop();
else if(s!="."&&s!=".."&&s!="")
r.push(s);
}
if(r.empty())
return "/";
else
{
string rr;
while(!r.empty())
{
rr='/'+r.top()+rr;
r.pop();
}
return rr;
}
}
};