这道题思路很简单,就是按照“/”分开然后压栈,遇到特定字符进行处理即可
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;
}
}