Reverse Parentheses算法第10测试用例持续失败求助
括号反转功能测试用例失败的排查思路
问题说明
我正在实现括号反转功能,自己写了基于栈的Python代码(如下),还试过LeetCode上的递归与栈实现、StackOverFlow及论坛里的多种算法方案,但第10个测试用例始终执行失败。目前已经查到有类似问题记录,怀疑是测试用例本身存在问题,想求一些解决思路。
我的代码实现
def reverse_parentheses(s): """ Reverse the strings contained in each pair of matching parentheses, starting from the innermost pair. The results string should not contain any parentheses. >>> reverse_parentheses('a(bc)de') 'acbde' >>> reverse_parentheses( ... 'The ((quick (brown) (fox) jumps over the lazy) dog)' ... ) 'The god quick nworb xof jumps over the lazy' """ chars = list(s) open_bracket_indexes = [] for i, c in enumerate(chars): if c == '(': open_bracket_indexes.append(i) elif c == ')': j = open_bracket_indexes.pop() chars[j:i] = chars[i:j:-1] if open_bracket_indexes: raise ArgumentError('Unclosed parenthesis') print(''.join(c for c in chars if c not in '()')) s = input() reverse_parentheses(s)
可行的排查方向
- 先拿到第10个测试用例的具体输入:别直接断定是测试用例的问题,先搞到这个测试用例的输入内容,手动计算正确输出,再对比你的代码、其他可靠算法的输出。如果多个正确算法的结果一致,但和测试用例的预期不符,那大概率是测试用例写错了。
- 检查代码细节漏洞:你代码里的反转逻辑
chars[j:i] = chars[i:j:-1],切片i:j:-1是从i的前一位倒序取到j的后一位,在多层嵌套括号、连续括号这类场景下,会不会出现反转范围错误?比如漏转了部分字符或者多转了? - 修正异常处理的错误:Python里没有
ArgumentError这个内置异常类,应该用ValueError替代。如果第10个测试用例刚好包含未闭合的括号,你的代码会抛出未定义的异常,直接导致执行失败,这是代码本身的问题。 - 和通过所有测试的实现逐行对比:找LeetCode上能全过的栈实现代码,跟你的代码逐行对比,比如人家的栈存储的是索引还是字符,反转的时机和范围怎么处理的,很容易找到逻辑差异。
- 打印中间过程定位问题:在代码里添加打印语句,每次处理括号时,输出当前的
chars列表、栈内的索引情况,跑第10个测试用例时,就能看到哪一步的结果不符合预期,快速定位问题点。
内容的提问来源于stack exchange,提问作者ASD
相关产品推荐
相关产品推荐

