简化文件的路径
输入:"/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(); } }