• 20. 有效的括号


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

    有效字符串需满足:

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

    示例 1:

    输入:s = "()"
    输出:true
    示例 2:

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

    输入:s = "(]"
    输出:false
    示例 4:

    输入:s = "([)]"
    输出:false
    示例 5:

    输入:s = "{[]}"
    输出:true
     

    提示:

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

    class Solution {
        public boolean isValid(String s) {
            int n = s.length();
            //当队列为奇数时,直接返回不匹配
            if (n % 2 == 1) {
                return false;
            }
    
            //括号匹配map
            Map<Character, Character> pairs = new HashMap<Character, Character>() {{
                put(')', '(');
                put(']', '[');
                put('}', '{');
            }};
            //定义栈
            Deque<Character> stack = new LinkedList<Character>();
            for (int i = 0; i < n; i++) {
                char ch = s.charAt(i);
                //判断右括号是否匹配
                if (pairs.containsKey(ch)) {
                    if (stack.isEmpty() || stack.peek() != pairs.get(ch)) {
                        return false;
                    }
                    stack.pop();
                } else {
                    //左括号压入栈,pairs.containsKey(ch)为false,说明是左括号
                    stack.push(ch);
                }
            }
            //当整个栈都被弹出时,说明所有元素都被成功匹配
            return stack.isEmpty();
        }
    }
  • 相关阅读:
    为什么C++(感谢waterwalk翻译)
    容器操作笔记
    如此理解面向对象编程
    C++初学者小细节(不定时更新)
    Sales_item 专题
    10步让你成为更优秀的程序员
    C++ PRIMER 笔记
    C++ 异常处理
    透明度 rgba 和 opacity 的区别
    盒模型
  • 原文地址:https://www.cnblogs.com/CCTVCHCH/p/15891612.html
Copyright © 2020-2023  润新知