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

递归式括号匹配(Python):现有代码问题及修改方案咨询

修正括号匹配递归函数的问题

原代码存在两个核心缺陷,导致无法正确验证"))(("这类括号顺序错误的用例:

  1. 未处理右括号提前超过左括号的情况(即计数cnt变为负数时,没有立即终止判断)
  2. 字符串遍历完成时,直接返回True,忽略了还有未闭合左括号(cnt>0)的场景

修改后的代码

def paren(s, cnt=0):
    # 右括号数量已超过左括号,直接判定不匹配
    if cnt < 0:
        return False
    # 字符串遍历完成时,只有计数为0才说明完全匹配
    if s == '':
        return cnt == 0
    if s[0] == '(':
        return paren(s[1:], cnt + 1)
    elif s[0] == ')':
        return paren(s[1:], cnt - 1)
    # 若存在非括号字符,按原逻辑返回当前计数是否为0(可根据需求调整)
    return cnt == 0

修改说明

  • 新增cnt < 0的前置判断:只要递归过程中出现右括号比左括号多的情况,直接返回False,避免继续无效的递归计算,这是解决"))(("这类用例的关键。
  • 修正空字符串的返回逻辑:原代码直接返回True,现在改为返回cnt == 0,确保所有左括号都有对应的右闭合(比如输入"((("时,遍历结束后cnt=3,会正确返回False)。

测试验证

  • 输入"))((":第一个字符为),cnt变为-1,触发前置判断返回False,正确。
  • 输入"((()))":遍历结束后cnt=0,返回True,正确。
  • 输入"(()))(":遍历到第五个字符)时cnt变为-1,返回False,正确。
  • 输入"(((":遍历结束后cnt=3,返回False,正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:55:30