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

括号平衡算法无法检测不平衡括号,代码始终输出Success问题求助

排查括号平衡算法始终输出"success"的问题

看起来你的括号检测逻辑肯定在某个环节漏掉了关键判断,导致无论输入如何都走到了输出success的分支。我来帮你梳理下常见的错误点,再给你一个符合要求的实现参考:

常见的错误原因

  • 循环结束后未检查栈是否为空:比如所有右括号都匹配了,但还有未闭合的左括号留在栈里,这时候应该返回第一个未闭合左括号的索引,但代码直接输出success了。
  • 右括号匹配时未做有效性检查:比如遇到右括号时,不管栈里有没有对应的左括号,直接跳过或者错误地认为匹配,没有触发不平衡的判断。
  • 括号类型匹配逻辑错误:比如把不同类型的括号(比如(和])当成匹配的,导致错误地弹出栈,最终栈被清空输出success。
  • 错误的分支逻辑:比如代码里的条件判断写反了,或者默认分支就是输出success,没有正确触发不平衡的返回。

正确的实现思路与示例代码

下面是一个符合要求的Python实现,你可以对比自己的代码找差异:

def check_balance(s):
    stack = []
    # 定义括号匹配映射,右括号为键,对应左括号为值
    bracket_map = {')': '(', ']': '[', '}': '{'}
    for idx, char in enumerate(s, start=1):  # 索引从1开始计数
        if char in bracket_map.values():
            # 左括号,压入索引和括号类型
            stack.append((idx, char))
        elif char in bracket_map.keys():
            # 右括号,先检查栈是否为空(无对应左括号)
            if not stack:
                return idx
            # 检查栈顶左括号是否匹配当前右括号
            if stack[-1][1] != bracket_map[char]:
                return idx
            # 匹配成功,弹出栈顶
            stack.pop()
    # 循环结束后检查栈是否还有未闭合的左括号
    if stack:
        # 返回第一个未闭合的左括号索引(栈底元素的索引)
        return stack[0][0]
    # 所有括号都平衡
    return "success"

# 测试用例验证
print(check_balance("([])"))    # 输出 success
print(check_balance("([)]"))    # 输出 3
print(check_balance("((()))"))  # 输出 success
print(check_balance("((())"))   # 输出 1
print(check_balance("())"))     # 输出 3

关键检查点

  • 遇到右括号时,必须先判断栈是否为空:空栈说明没有对应的左括号,直接返回当前索引。
  • 右括号和栈顶左括号的类型必须严格匹配,不能混淆不同类型的括号。
  • 循环结束后一定要检查栈的状态:如果栈不为空,说明有未闭合的左括号,返回第一个左括号的索引。
  • 索引计数要从1开始,enumerate的start=1参数可以直接实现这一点。

你可以对照自己的代码,看看是不是漏掉了上面某一步的判断,比如有没有在循环结束后检查栈是否为空,或者遇到右括号时有没有正确判断匹配情况。

内容的提问来源于stack exchange,提问作者Diego Jose Quan Campos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:13:34