栈与队列简单1 种解法

#20有效的括号

判断括号字符串是否按正确类型和嵌套顺序闭合。

#字符串#

解题主线

01

读到左括号时压入其期望的右括号,读到右括号时只需与栈顶比较。

解法 1期望右括号栈

左括号入栈时直接压入匹配的右括号;右括号必须弹出相同字符。

时间复杂度

O(n)

空间复杂度

O(n)

20. 有效的括号 · 期望右括号栈
import java.util.ArrayDeque;
import java.util.Deque;

final class Solution {
    public boolean isValid(String s) {
        if ((s.length() & 1) == 1) return false;
        Deque<Character> expected = new ArrayDeque<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            switch (c) {
                case '(' -> expected.push(')');
                case '[' -> expected.push(']');
                case '{' -> expected.push('}');
                default -> {
                    if (expected.isEmpty() || expected.pop() != c) return false;
                }
            }
        }
        return expected.isEmpty();
    }
}

左括号入栈时直接压入匹配的右括号;右括号必须弹出相同字符。

  • 合并两个同题文件,保留等价实现中状态最少的一种。

边界与易错点

  • 奇数长度必不合法,可先排除。
  • 栈必须是方法内局部变量;旧实现使用实例字段会让重复调用共享残留状态。
  • ArrayDeque 比遗留的 Stack 和以 LinkedList 实现的栈更合适。
整理来源

由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。

easy/Q020_isValid.javaeasy/Q020_isValidStr.java