【队列 &栈】day13_20. 有效的括号

32 阅读1分钟

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

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

示例 2:

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

示例 3:

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

 

提示:

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

题解

题解一:用栈来实现

思路:运用栈先进后出的特性

时间复杂度:O(n) 空间复杂度:O(n)

class Solution {
    public boolean isValid(String s) {
        if (s.length() % 2 != 0) {
            return false;
        }
        Map<Character, Character> dict = new HashMap<>();
        dict.put('(', ')');
        dict.put('{', '}');
        dict.put('[', ']');
        dict.put('0', '0');

        Stack<Character> stack = new  Stack<Character>() {{
            push('0');
        }};
        for (char c : s.toCharArray()) {
            if (dict.containsKey(c)) {
                stack.push(c);
                continue;
            }
            if (dict.get(stack.pop()) != c) {
                return false;
            }
        }
        return stack.pop() == '0';
    }
}