leetcode71.简化路径

参考了leetcode的官方题解,用/分割字符串就能解决多个/的问题,利用栈后进先出,碰到..就回退出栈,空字符串和.不用处理,其余正常的目录就入栈,最后双端链表从头拼接就是结果

java 复制代码
class Solution {
    public String simplifyPath(String path) {
        Deque<String> deque = new LinkedList<>();
        String[] split = path.split("/");
        //1.向双端链表中放入符合要求的目录
        for (String s : split) {
            //1.1如果目录是..那么就要回到上级目录也就是出栈
            if (s.equals("..")) {
                if (!deque.isEmpty()) {
                    deque.pollLast();
                }
            } else if (s.length() > 0 && !s.equals(".")) {
                //1.2如果是正常的目录就放入栈
                deque.addLast(s);
            }
        }
        //2.将双端链表从后向前拼接就是结果
        //2.1双端链表为空那么就是根目录
        if (deque.isEmpty()) {
            return "/";
        }
        //2.2双端链表不为空则拼接成完整路径
        StringBuilder stringBuilder = new StringBuilder();
        for (String s : deque) {
            stringBuilder.append("/").append(s);
        }
        return stringBuilder.toString();
    }
}