您的位置:首页 > 其它

[leetcode] Simplify Path

2016-07-18 10:34 211 查看
题目:

Given an absolute path for a file (Unix-style), simplify it.

For example,
path = 
"/home/"
, => 
"/home"

path = 
"/a/./b/../../c/"
, => 
"/c"


click to show corner cases.

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;

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: