Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/"
, => "/home"
path = "/a/./b/../../c/"
, => "/c"
这个题就是拼体力的,用一个string的stack,然后码就可以了。。。注意边界条件
class Solution {
public:
string simplifyPath(string path) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(path.back() != '/') path.push_back('/');
stack<string> s;
string buffer;
for(int i = 0; i < path.length(); i++){
if(path[i] == '/'){
if(buffer == ".."){
if(!s.empty()) s.pop();
}else if(buffer != "." && (!buffer.empty())){
s.push(buffer);
}
buffer.clear();
}else{
buffer.push_back(path[i]);
}
}
stack<string> tmp;
while(!s.empty()){
tmp.push(s.top());
s.pop();
}
string ret;
while(!tmp.empty()){
ret.push_back('/');
ret.append(tmp.top());
tmp.pop();
}
if(ret.empty()) return "/";
return ret;
}
};