二刷71. Simplify Path

Medium

这种遇到..要退后的,放进去,再取出来最近放进去的,就要联想到Stack。这道题的主要数据结构就是stack. 然后用一个set来存下特殊符号:.., .,和空string. 这样遍历的时候,遇到..以及确定stack不空,我们就可以pop()元素出来;遇到.和空string(空string只有末尾被split出来的情况),we do nothing. 遇到字母这些,就加到stack里面。
最后构建res string的时候,记得要加/;最后答案如果是“”, 也要加/.

class Solution {
    public String simplifyPath(String path) {
        Stack<String> stack = new Stack<>();
        Set<String> set = new HashSet<>(Arrays.asList(".","..",""));
        String[] paths = path.split("/");
        //"/a/./b/../../c/"
        // a . b .. .. c
        for (String str : paths){
            if (str.equals("..") && !stack.isEmpty()){
                stack.pop();
            }
            if (!set.contains(str)){
                stack.push(str);
            }
        }
        String res = "";
        for (String s : stack){
            res += "/" + s;
        }
        if (res.length() != 0){
            return res;
        } else {
            return "/";
        }
    }
}

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    张土汪阅读 10,350评论 0 31
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 141,780评论 18 609
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 25,993评论 17 394
  • 回忆 独自在月光下 必须等待日出的阳光 你走了那么久的路 是否为了摆脱 陈旧的负重
    毛毛不会飞阅读 23评论 0 0
  • 去年一个人跑去云南寻觅我要的诗跟远方,果然没有失望,印象深刻的是那浓厚的民族风,最喜欢中国独特的绛红色。 回来汾阳...
    小童姥姥阅读 825评论 0 1