递归式括号匹配(Python):现有代码问题及修改方案咨询
修正括号匹配递归函数的问题
原代码存在两个核心缺陷,导致无法正确验证"))(("这类括号顺序错误的用例:
- 未处理右括号提前超过左括号的情况(即计数
cnt变为负数时,没有立即终止判断) - 字符串遍历完成时,直接返回
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
相关产品推荐
相关产品推荐

