Python 递归匹配圆括号
我编写了下面的递归代码来匹配括号。在某些情况下,我得到'True',但如果我在字符串中的某个位置添加新的括号,这是不正确的,我仍然得到'True'。我调试了它,但我不知道如何修复它,我如何才能更正它Python 递归匹配圆括号,python,Python,我编写了下面的递归代码来匹配括号。在某些情况下,我得到'True',但如果我在字符串中的某个位置添加新的括号,这是不正确的,我仍然得到'True'。我调试了它,但我不知道如何修复它,我如何才能更正它 def is_balanced(parenthesis): if len(parenthesis) %2 == 1: return False left_value = parenthesis[:1:] right_value = parent
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”之类的外部库。无论如何,我写这个解决方案是为了自学。太多了!这就是精神!如果要正确执行,请在函数外部声明模式
,这样就不会在每次调用中重新编译;)