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<String> 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();
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Given an absolute path for a file (Unix-style), simplify ...
    matrxyz阅读 1,661评论 0 0
  • 一个split string字符串的小函数 解法思路 以/为分隔符,得到/之间的字符串:item。注意,为了处理....
    analanxingde阅读 1,544评论 0 0
  • Given an absolute path for a file (Unix-style), simplify ...
    Jeanz阅读 3,421评论 0 0
  • Medium 这种遇到..要退后的,放进去,再取出来最近放进去的,就要联想到Stack。这道题的主要数据结构就是s...
    greatseniorsde阅读 1,220评论 0 0
  • 分类:Stack 时间复杂度: O(n) 空间复杂度: O(n) 71. Simplify Path Given ...
    野生小熊猫阅读 1,373评论 0 1

友情链接更多精彩内容