20 有效的括号

一、题目

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

有效字符串需满足:

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

二、题解

遇到左括号时,直接将对应的右括号压入栈中;遇到右括号时,只需判断它是否与栈顶元素相等即可。

import java.util.Stack;

class Solution {
    public boolean isValid(String s) {
        // 如果字符串长度为奇数,肯定无法完全匹配,提前返回
        if (s.length() % 2 != 0) {
            return false;
        }

        Stack<Character> stack = new Stack<>();

        // 遍历字符串中的每一个字符
        for (char c : s.toCharArray()) {
            // 遇到左括号,就把相应的右括号压入栈中
            if (c == '(') {
                stack.push(')');
            } else if (c == '{') {
                stack.push('}');
            } else if (c == '[') {
                stack.push(']');
            }
            // 遇到右括号时,进行匹配判断
            else {
                // 如果栈为空(说明没有多余的左括号来匹配当前的右括号)
                // 或者栈顶弹出的括号与当前右括号不匹配
                if (stack.isEmpty() || stack.pop() != c) {
                    return false;
                }
            }
        }

        // 遍历结束后,如果栈为空,说明所有括号都成功匹配;否则说明有未匹配的左括号
        return stack.isEmpty();
    }
}

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

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

评论