You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode20有效的括号题Java代码输入(])返回true错误原因求解

问题原因

你的代码核心问题是右括号匹配逻辑使用了三个独立的if判断,没有处理括号类型不匹配的场景,匹配失败时不会提前返回false,会继续执行后续遍历逻辑,最终导致结果不符合预期。

错误用例执行复现

输入用例:"(])"

  1. 遍历第一个字符'(':属于左括号,压入栈,栈当前内容:['(']
  2. 遍历第二个字符']':属于右括号,栈非空
    • 第一个if判断c == ')'不成立,跳过
    • 第二个if判断c == ']' && stack.peek() == '[':栈顶是'(',条件不成立,跳过
    • 第三个if判断c == '}'不成立,跳过
      本次循环无任何操作,直接进入下一轮遍历
  3. 遍历第三个字符')':属于右括号,栈非空
    • 第一个if判断c == ')' && stack.peek() == '('成立,弹出栈顶,栈变为空
  4. 遍历结束,返回stack.empty()结果为true,和预期false不符
修复方案

把三个独立的if改为if-else if-else结构,一旦括号类型不匹配直接返回false,修正后的代码如下:

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for(char c: s.toCharArray()){
            if(c == '(' || c == '[' || c == '{'){
                stack.push(c);
            }else{
                if(stack.empty()){
                    return false;
                }
                if(c == ')' && stack.peek() == '('){
                    stack.pop();
                } else if(c == ']' && stack.peek() == '['){
                    stack.pop();
                } else if(c == '}' && stack.peek() == '{'){
                    stack.pop();
                } else {
                    // 括号类型不匹配,直接返回无效
                    return false;
                }
            }
        }
        return stack.empty();
    }
}

内容的提问来源于stack exchange,提问作者Binky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:45:06