我遇到一个问题,我必须评估数学表达式中使用的每个括号是否都有匹配的右括号。
例如:
[(a+b)+b]
[(a+b}+b]
以下是我的代码:
str1 = input()
matches = {'(':')','[':']','{':'}'}
open = ['(','[','{']
close = [')',']','}']
track = []
negative = 0
for c in str1:
if c in open:
track.append(c)
elif c in close:
if c != matches[track[-1]]:
negative = 1
break
else:
del track[-1]
if negative == 1:
print ("False")
else:
print ("True")
是否有更好的方法可以使用正则表达式?我的代码是否足够好还是可以优化?
答案 0 :(得分:2)
根据您对表达式的处理方式,您可以轻松编写LL Parser或Shunting-Yard algorithm的代码。它们是解决此类问题的两种最常见的解决方案("解析"问题)。
答案 1 :(得分:0)
堆栈可以工作:
def validate(_str):
braces = set("[](){}")
opening = set("[({")
closing = {"]":"[", ")":"(", "}":"{"}
stack = list()
for _char in _str:
if _char in opening:
stack.append(_char)
elif _char in closing:
if closing[_char] == stack[-1]:
stack.pop()
else:
return False
return True
print("Should be False:",validate("(a+b}+b"))
print("Should be True:",validate("(a+b)+b"))
print("Should be True:",validate("(a+[b-c+{d+e}])+b"))
print("Should be False:",validate("(a+]b-c+{d+e}])+b"))