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

LeetCode 20、有效的括号

作者: 南北VS东西 | 来源:发表于2020-06-16 21:38 被阅读0次

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

    有效字符串需满足:

    1. 左括号必须用相同类型的右括号闭合。
    2. 左括号必须以正确的顺序闭合。
      注意空字符串可被认为是有效字符串。
    示例 1:
      输入: "()"
      输出: true
    示例 2:
      输入: "()[]{}"
      输出: true
    示例 3:
      输入: "(]"
      输出: false
    示例 4:
      输入: "([)]"
      输出: false
    示例 5:
      输入: "{[]}"
      输出: true
    

    解题思路:利用栈的先进后出原则、属于左括号'(''{''[' 的进行入栈、当出现右括号 ')''}'']'时、看栈顶是否是与之对应的左括号、如果是将栈内对应的左括号弹出、如果不能对应上则表示括号不是对应的。
    代码示例:

    public boolean isValid(String s) {
            Deque<Character> stack = new ArrayDeque<>();
            for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) == '(' || s.charAt(i) == '{' || s.charAt(i) == '[') {
                    // 字符串中是左括号进行入栈操作
                    stack.push(s.charAt(i));
                } else {
                    if (stack.isEmpty()) {
                        return false;
                    } else {
                        // 当前字符串是右括号、若栈顶不是与之对应的左括号则表示此字符串无效
                        if (stack.peek() == '(' && s.charAt(i) != ')') {
                            return false;
                        } else if (stack.peek() == '{' && s.charAt(i) != '}') {
                            return false;
                        } else if (stack.peek() == '[' && s.charAt(i) != ']') {
                            return false;
                        }
                        // 符合条件的一组 弹出栈顶 
                        stack.pop();
                    }
                }
            }
            // stack.isEmpty() true:字符串括号有效都是对应的 false: 无效 不对应
            return stack.isEmpty();
        }
    

    相关文章

      网友评论

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

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