71. Simplify Path

这是一道经典栈的应用题。
不知道为什么那么多差评。
这题一定要做熟。
我想提一点在这里,我还看到很多人在用Stack.
Java里面的Stack已经depreciate了,
官方文档里建议是用Deque。
所以最好使用Deque, 你当然也可以像stack 一样使用它。stack有的api,deque都有。
关于为什么不用Stack,请参考以下文档。
主要原因有几条
1。 Stack继承自Vector, 加了不必要的锁,降低了效率。
2。 Stack继承自Vector, 可以实现在数组的中间插入。这就不叫Stack了。
https://stackoverflow.com/questions/1386275/why-is-java-vector-and-stack-class-considered-obsolete-or-deprecated
好了,现在看代码。又用了我最爱的双指针。

    public String simplifyPath(String path) {
        Deque deque = new ArrayDeque<>();
        int slow = 0, fast = 0;
        while (fast < path.length()) {
            while (fast + 1 < path.length() && path.charAt(fast + 1) != '/') {
                fast++;
            }
            String seg = path.substring(slow + 1, fast + 1);
            if (seg.length() == 0 || seg.equals(".")) {
                //do nothing
            } else if (seg.equals("..")) {
                if (!deque.isEmpty()) deque.pollLast();
            } else {
                deque.offerLast(seg);
            }
            slow = ++ fast;
        }
        StringBuilder sb = new StringBuilder();
        if (deque.size() == 0) return "/";
        while (!deque.isEmpty()) {
            sb.append("/");
            sb.append(deque.pollFirst());
        }
        return sb.toString();
    }

你可能感兴趣的:(71. Simplify Path)