美文网首页
LeetCode:20. 有效的括号

LeetCode:20. 有效的括号

作者: alex很累 | 来源:发表于2022-02-28 23:25 被阅读0次

    问题链接

    #### 20. 有效的括号

    问题描述

    给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

    有效字符串需满足:

    • 左括号必须用相同类型的右括号闭合。
    • 左括号必须以正确的顺序闭合。

    提示:

    • 1 <= s.length <= 104
    • s 仅由括号 '()[]{}' 组成

    示例

    示例1
    输入:s = "()"
    输出:true
    
    示例2
    输入:s = "()[]{}"
    输出:true
    
    示例3
    输入:s = "(]"
    输出:false
    
    示例4
    输入:s = "{[]}"
    输出:true
    

    解题思路

    核心:栈

    • 方法1: 替换字符串
      不停的用()[]{}对原字符串进行替换,替换成空字符串;直到无法替换,看一下当前字符串是不是空,不如是空,返回true;反之,存在多余的括号,返回false

    • 方法2: 栈
      首先,检验一下字符串的长度是不是2的整数倍,如果不是,肯定有括号无法进行匹配,直接结束;
      然后,新建一个栈,遍历原字符串:如果遇到左括号,就往栈里扔;如果遇到右括号,取出栈顶元素进行匹配校验,校验失败就直接返回false结束;
      最后,校验一下栈是否为空,如果为空,表示全都匹配完了,返回true;反之,返回false

    代码示例(JAVA)

    这里仅展示栈的解法,其中,用了一个map来维护括号对。

    class Solution {
        public boolean isValid(String s) {
            if (s.length() % 2 != 0) {
                return false;
            }
    
            Stack<Character> stack = new Stack<>();
            Map<Character, Character> map = new HashMap<Character, Character>() {{
                put(')', '(');
                put('}', '{');
                put(']', '[');
            }};
            for (char c : s.toCharArray()) {
                if (!map.keySet().contains(c)) {
                    stack.push(c);
                } else {
                    if (stack.empty() || stack.pop() != map.get(c)) {
                        return false;
                    }
                }
            }
            return stack.empty();
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode:20. 有效的括号

          本文链接:https://www.haomeiwen.com/subject/qifzkrtx.html