题目:
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:
/***
* 注意几个细节:
* 1)重复连续出现的'/',只按1个处理,即跳过重复连续出现的'/';
* 2)如果路径名是".",则不处理;
* 3)如果路径名是"..",则需要弹栈,如果栈为空,则不做处理;
* 4)如果路径名为其他字符串,入栈。
*
*
* */
string simplifyPath(string path) {
int size = path.size();
stack<string> ss;
for(int i = 0; i < size;){
//跳过'/'
while('/' == path[i] && i < size)
++ i;
//记录路径名称
string s = "";
while('/' != path[i] && i < size)
s += path[i ++];
//对当前路径进行处理
if(s == ".." && !ss.empty())
ss.pop();
else if(s != "" && s!= "." && s != "..")
ss.push(s);
}
string res = "";
if(ss.empty())
return "/";
else{
//注意输出顺序
while(!ss.empty()){
res = "/" + ss.top() + res;
ss.pop();
}
}
return res;
}
};