我编写了下面的递归代码来匹配括号。在某些情况下,我得到“True”,但如果在字符串的某个位置添加新的括号(这是不正确的),我仍然得到“True”。我调试了它,我不知道如何修复它,我如何才能纠正它?

def is_balanced(parenthesis):
    if len(parenthesis) %2 == 1:
        return False
        left_value = parenthesis[:1:]
        right_value = parenthesis[-1::]
        return is_balanced(parenthesis[1:-1:]) if left_value != right_value else
        True

    print(is_balanced('(()()[]()())')) => #True
    print(is_balanced('(()()[[()())')) => #still True

最佳答案

下面是一个相当简洁的基于正则表达式的实现:

import re

def is_balanced(par):
    pattern = re.compile('\(\)|{}|\[\]')  # matches '()', '[]', or '{}'
    return not par or bool(pattern.search(par)) and is_balanced(pattern.sub('', par))

10-02 07:10