输入:"/home/" 输出:"/home" 解释:注意,最后一个目录名后面没有斜杠。 输入:"/../" 输出:"/" 解释:从根目录向上一级是不可行的,因为根是你可以到达的最高级。 输入:"/home//foo/" 输出:"/home/foo" 解释:在规范路径中,多个连续斜杠需要用一个斜杠替换 输入:"/a/../../b/../c//.//" 输出:"/c"
解析:利用栈的思想,遇到下一级的目录则进栈,遇到"."不用管,遇到".."出栈,相互抵消。剩下在栈里面的就输出,get方法从栈底开始输出。
class Solution {
public String simplifyPath(String path) {
String[] s = path.split("/");//如果是"/path/"会被分成("","path","")
Stack<String> stack = new Stack<String>();
for(int i=0;i<s.length;i++){
if(!stack.isEmpty() && s[i].equals("..")){//如果是..,返回上一级目录
stack.pop();
}else if(!s[i].equals("") && !s[i].equals(".") && !s[i].equals("..")){//如果是真实有效的目录名
stack.push(s[i]);
}
}
if(stack.isEmpty()){
return "/";
}
StringBuffer res = new StringBuffer();
for(int i= 0;i<stack.size();i++){
res.append("/"+stack.get(i));//get()的作用是从栈底元素开始的
}
return res.toString();
}
} 
京公网安备 11010502036488号