您的位置:首页 > 其它

leetcode做题总结,题目Simplify Path 71

2014-12-28 03:11 393 查看
题目是Simplify
Path

这道题思路很简单,就是按照“/”分开然后压栈,遇到特定字符进行处理即可

public class Solution {
public String simplifyPath(String path) {
if(path.length()==0)
return null;
if(path.length()==1)
return path;
String[] pa = path.split("/");
Stack<String> s = new Stack<String>();
for(int i=0;i<pa.length;i++){
//cannot use pa[i]!=null here, because null is different with "";
if(!pa[i].equals("")){
if(s.size()==0){
if(pa[i].equals(".")||pa[i].equals(".."));
else
s.push(pa[i]);
}else{
if(pa[i].equals("."))
continue;
if(pa[i].equals("..")){
s.pop();
continue;
}
s.push(pa[i]);
}

}

}
String res="";
int len=s.size();
//when using collection's length in for, make sure the length will NOT change!
for(int i=0;i<len;i++){
res = "/"+s.pop() + res;
}
if(res.length()==0)
return "/";
return res;
}
}


Update 2015、08、31:思路一样,下面是九章的代码,感觉逻辑能简单些

public class Solution {
/**
* @param path the original path
* @return the simplified path
*/
public String simplifyPath(String path) {
// Write your code here
String result = "/";
String[] stubs = path.split("/+");
ArrayList<String> paths = new ArrayList<String>();
for (String s : stubs){
if(s.equals("..")){
if(paths.size() > 0){
paths.remove(paths.size() - 1);
}
}
else if (!s.equals(".") && !s.equals("")){
paths.add(s);
}
}
for (String s : paths){
result += s + "/";
}
if (result.length() > 1)
result = result.substring(0, result.length() - 1);
return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: