Python 递归匹配圆括号

Python 递归匹配圆括号,python,Python,我编写了下面的递归代码来匹配括号。在某些情况下,我得到'True',但如果我在字符串中的某个位置添加新的括号,这是不正确的,我仍然得到'True'。我调试了它,但我不知道如何修复它,我如何才能更正它 def is_balanced(parenthesis): if len(parenthesis) %2 == 1: return False left_value = parenthesis[:1:] right_value = parent

我编写了下面的递归代码来匹配括号。在某些情况下,我得到'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

一种递归方法如下所示:

def is_balanced(parenthesis):
    l = len(parenthesis)
    if l == 0:
        return True
    else:
        if '()' in parenthesis or '[]' in parenthesis:
            return is_balanced(parenthesis.replace('()', '').replace('[]', ''))
        else:
            return False

print(is_balanced('(()()[]()())'))  # True
print(is_balanced('(()()[[()())'))  # False

这里的想法是用一个空字符串递归地替换闭括号和闭括号,并查看是否以一个空字符串结束

更简单但不是递归的方法是:

def is_balanced(parenthesis):
    brackets = ['()', '{}', '[]']
    while any(x in parenthesis for x in brackets):
        for br in brackets:
            parenthesis = parenthesis.replace(br, '')
    return not parenthesis

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

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))

请重新格式化此代码。
:1:
:1
相同,
-1:
-1:
相同,
1:
1:
相同。如果你用
-0
替换
:1
,用
-1
替换
-1:
,你的代码就更清晰了。所以你有时间编辑你的问题,但没有时间重新格式化你的代码?我不明白你的回报是平衡线。如果离开!=正确的结果应该是假的,没有进一步的递归。实际的副本在哪里检查?左!=右括号不自动匹配,谢谢!这是我的家庭作业,我不能在函数名中使用更多参数。@BenjaminYakobi它必须是递归的吗?@BenjaminYakobi我根据您的需要修改了它。谢谢您的帮助!我们不能使用诸如“re”之类的外部库。无论如何,我写这个解决方案是为了自学。太多了!这就是精神!如果要正确执行,请在函数外部声明
模式
,这样就不会在每次调用中重新编译;)