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