题目:
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/"
, => "/home"
path = "/a/./b/../../c/"
, => "/c"
- 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"
.
用栈可以搞,一个点不用管,两个点pop,最后再逆序输出
代码:
class Solution {
public:
string simplifyPath(string path) {
stack<string> s;
int pos = 0
while(1) {
string tmp = check(path, pos);
if(tmp == "") break;
if(tmp == ".") continue;
if(tmp == "..") {
if(!s.empty())
s.pop();
}
else
s.push(tmp);
}
if(s.empty()) return "/";
Print(s);
return ans;
}
private:
string ans;
string check(string path, int &pos) {
while(path[pos] == '/') pos ++;
string rec;
int i;
for(i = pos; i < path.size() && path[i] != '/'; i ++)
rec += path[i];
pos = i;
return rec;
}
void Print(stack<string> s) {
if(s.empty()) return ;
string top = s.top();
s.pop();
Print(s);
ans += '/';
ans += top;
}
};