输入:"/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();

    }
}