Loading

Easy | LeetCode 20. 有效的括号 | 栈

20. 有效的括号

难度简单2191收藏分享切换为英文接收动态反馈

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

有效字符串需满足:

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

示例 1:

输入:s = "()"
输出:true

示例 2:

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

示例 3:

输入:s = "(]"
输出:false

示例 4:

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

示例 5:

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

提示:

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

解题思路

方法一: 栈

public boolean isValid(String s) {
    int n = s.length();
    if (n % 2 == 1) {
        return false;
    }

    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 {
            // 遇到左括号
            stack.push(ch);
        }
    }
    return stack.isEmpty();
}
posted @ 2021-02-27 17:44  反身而诚、  阅读(45)  评论(0编辑  收藏  举报