LeetCode~20.有效的括号~解题思路分析

有效的括号(简单)

题目描述:

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

代码解析

        // 1. 根据题目可以得到该字符串长度为偶数,提前排除奇数长度的字符串
        if (s.length() % 2 != 0) return false;

        // 2. 题目末尾提示空字符串为有效字符串(注意:这一条有可能会被忽略导致后面代码运行错误)
        if (s.equals("")) return true;

        // 3.创建一个Map集合存放几个括号类型
        Map<Character, Character> map = new HashMap<>();
        map.put(')', '(');
        map.put(']', '[');
        map.put('}', '{');

        // 4.判断如果是以右括号开头的直接判定为无效字符串
        if (map.containsKey(s.charAt(0))) return false;

        // 5.创建一个LinkedList集合存储每一位字符
        LinkedList<Character> list = new LinkedList<>();

        // 6.遍历字符串
        for(int i = 0; i < s.length(); i++ ){
            /*
              判断当前位置的字符是否在Map集合中
              如果存在,list集合的末尾是否与之匹配为一对
              匹配则删除list集合末尾元素,不匹配则将该元素添加至list集合尾部
            */
            if(map.containsKey(s.charAt(i)) && list.getLast().equals(map.get(s.charAt(i)))) {
                list.removeLast();
            }else{
                list.add(s.charAt(i));
            }
        }

        // 7.根据list集合的长度判断该字符串是否都能相互匹配,返回结果
        return list.size() == 0;

提交结果

有效的括号(简单)-末尾消除.png

小结: 一开始没审清题意,在空字符串那里就踩了个坑,后面在括号那边也进了一条岔路,只做了顺序的判断(如: "[][][]")以及中间的判断(如: "((()))"),所以直接用了两个变量分别获取 i 与 i+1 的位置来判断每一位元素.
后面重新整理了一下思路发现要实现该效果还是很简单的,使用后进先出的 栈 模式就能实现该效果,每次获取最后两位判断是否匹配,删除匹配的括号,达到一遍遍历的效果

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses

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

相关阅读更多精彩内容

友情链接更多精彩内容