美文网首页
字符串 - 有效的括号

字符串 - 有效的括号

作者: greedycr7 | 来源:发表于2020-08-04 20:47 被阅读0次

20. 有效的括号

题目描述

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

有效字符串需满足:
(1) 左括号必须用相同类型的右括号闭合。
(2) 左括号必须以正确的顺序闭合。
注意:空字符串可被认为是有效字符串。

示例 1:
输入: "()"
输出: true

示例 2:
输入: "()[]{}"
输出: true

示例 3:
输入: "(]"
输出: false

示例 4:
输入: "([)]"
输出: false

示例 5:
输入: "{[]}"
输出: true

算法思想

这题是比较简单的括号匹配问题,可以使用栈来实现。
遍历字符串,如果当前字符为左括号,则进行压栈操作;否则,则进行出栈操作,同时判断出栈元素是否为当前字符对应的左括号,如果不是,则说明括号不匹配。
如果最后栈为空,说明字符串中的括号全部匹配成功。

考虑几种特殊的情况:

  • 如果字符串的长度为奇数,则肯定不满足括号匹配条件,直接返回false
  • 如果字符串为空,则直接返回true

代码实现

class Solution {
    private static final Map<Character, Character> map = new HashMap<>(){
        {
            put('(',')');
            put('[', ']');
            put('{', '}');
        
        }
    };

    public boolean isValid(String s) {
        int i = 0;
        int len = s.length();

        // 如果字符串的长度为奇数,则肯定不满足条件
        if (len % 2 == 1) {
            return false;
        }

        List<Character> stack = new LinkedList<>();
        while(i < len) {
            // 如果当前字符为左括号,则压栈,否则出栈
            if (map.containsKey(s.charAt(i))) {
                stack.add(s.charAt(i));
            } else {
                // 如果栈为空,说明当前字符没有与之匹配的左括号,直接返回false
                if (stack.size() == 0) {
                    return false;
                }
                // 如果压栈的左括号对应的右括号为当前字符,则匹配成功,否则匹配失败
                if (map.get(stack.remove(stack.size() - 1)) != s.charAt(i)) {
                    return false;
                }
            }
            i ++;
        }

        return stack.size() == 0;
    }
}

相关文章

  • LeetCode-1021-删除最外层的括号

    有效括号字符串为空 ("")、"(" + A + ")" 或 A + B,其中 A 和 B 都是有效的括号字符串,...

  • 1111. 有效括号的嵌套深度

    题目: 有效括号字符串 定义:对于每个左括号,都能找到与之对应的右括号,反之亦然。详情参见题末「有效括号字符串」部...

  • 打开第32天:有效括号的嵌套深度

    1. 题目 有效括号字符串定义:对于每个左括号,都能找到与之对应的右括号,反之亦然。详情参见题末「有效括号字符串」...

  • leetcode--day-3

    题目 有效括号字符串为空 ("")、"(" + A + ")" 或 A + B,其中 A 和 B 都是有效的括号字...

  • 1111-有效括号的嵌套深度

    有效括号的嵌套深度 题目 有效括号字符串 仅由 "(" 和 ")" 构成,并符合下述几个条件之一: 空字符串连接,...

  • 20. 有效的括号

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

  • 8,有效的括号/数组与字符串

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

  • [day6] [LeetCode] [title20,21]

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

  • 力扣算法 - 有效的括号

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

  • leetcode(python) 20. 有效的括号

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

网友评论

      本文标题:字符串 - 有效的括号

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