Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/"
, => "/home"
path = "/a/./b/../../c/"
, => "/c"
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".
难度:中等
题目解析:通过正则表达式的分割,把/符号去掉,变成单一元素的数组。然后再逐个判断放入stack,但是要注意的是当元素为..的时候要把其前面的那个具体位置干掉
代码:
public class Solution {
public String simplifyPath(String path) {
String[] elements=path.split("/+");
if(elements.length==0){
return "/";
}else{
Stack stack=new Stack();
for(int i=1;i<elements.length;i++){
if(elements[i].compareTo("..")!=0&&elements[i].compareTo(".")!=0){
stack.push(elements[i]);
}else if(elements[i].compareTo(".")!=0&&!stack.isEmpty()){
stack.pop();
}
}
StringBuffer buffer=new StringBuffer();
if(stack.isEmpty()){
buffer.append("/");
}else{
do{
buffer.insert(0, stack.pop());
buffer.insert(0, "/");
}while(!stack.isEmpty());
}
return buffer.toString();
}
}
}