28
07/2015
[LeetCode] Simplify Path
Simplify Path
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".
解题思路:
化简路径。可以用一个栈来记录。遍历原路径,遇到/,则判断最近一个单词。若为"."则什么也不做。若"..",弹出栈顶元素,否则入栈。
有一个比较巧的办法是,直接在path后面添加一个斜杠,这样就能避免讨论后面有斜杠还是没有斜杠了。
class Solution {
public:
string simplifyPath(string path) {
stack<string> ss;
path = path + "/";
int len = path.length();
string s="";
for(int i=0; i<len; i++){
if(path[i]=='/'){
if(s==".."){
if(!ss.empty()){
ss.pop();
}
}else if(s!=""&&s!="."){
ss.push(s);
}
s="";
}else{
s=s+path[i];
}
}
while(!ss.empty()){
s = string("/") + ss.top() + s;
ss.pop();
}
if(s==""){
s="/";
}
return s;
}
};转载请注明:康瑞部落 » [LeetCode] Simplify Path

0 条评论