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

有效括号验证代码Bug排查:测试用例([}}])输出异常

问题排查与修复

你的代码在处理不匹配括号时存在逻辑漏洞,导致错误输出true,核心问题有两个:

  1. 遇到不匹配的右括号未及时终止判断:比如测试用例([})](推测你描述的([}}])是笔误,因为它长度为5,你的代码开头会直接返回false),当遍历到第一个}时,栈顶是[,不匹配,但你的代码仅跳过弹出操作,继续执行后续循环,最终可能因其他操作让栈意外清空,错误返回true。
  2. 未处理栈空时的右括号:如果字符串中出现无对应左括号的右括号(比如开头就是}),你的代码会直接跳过处理,最后栈为空时错误返回true。

修正后的代码
class Solution {
    public boolean isValid(String s) {
        Stack<Character> st = new Stack<>();
        int len = s.length();
        if (len % 2 != 0) {
            return false;
        }
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            // 左括号直接入栈
            if (c == '(' || c == '{' || c == '[') {
                st.push(c);
            } else {
                // 栈为空,说明右括号无对应左括号,直接返回false
                if (st.isEmpty()) {
                    return false;
                }
                char topChar = st.peek();
                // 匹配则弹出栈顶,不匹配直接返回false
                if ((c == ')' && topChar == '(') || 
                    (c == '}' && topChar == '{') || 
                    (c == ']' && topChar == '[')) {
                    st.pop();
                } else {
                    return false;
                }
            }
        }
        // 最终栈为空则所有括号匹配完成
        return st.isEmpty();
    }
}

关键修复说明
  • 合并右括号处理逻辑:所有右括号统一进入else分支,先检查栈是否为空,为空直接返回false,避免无对应左括号的非法情况。
  • 不匹配立即终止:只要右括号和栈顶左括号不匹配,直接返回false,不会继续执行后续循环,确保错误被及时捕获。
  • 简化冗余判断:去掉原代码中重复的!st.isEmpty()检查,让逻辑更简洁清晰。

测试类似([})]的用例时,遍历到}时会发现与栈顶[不匹配,直接返回false,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:14:54