Ich habe ein Problem festgestellt, bei dem ich bewerten muss, ob jede in einem mathematischen Ausdruck verwendete Klammer eine passende schließende Klammer hat.Überprüfen Sie, ob jede geschweifte Klammer innerhalb eines Ausdrucks eine passende schließende Klammer hat.
Zum Beispiel:
- Valid Ausdruck:
[(a+b)+b]
- Nicht gültige Ausdruck:
[(a+b}+b]
Unten ist mein Code:
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")
Gibt es eine bessere Art und Weise zu tun, wie zum Beispiel mit regulären Ausdrücken? Ist mein Code gut genug oder kann er optimiert werden?
anzumerken, dass dieser Code einen Fehler für eine Eingabe wie ‚)‘ führt, wie Spur am Anfang leer. –
Mögliches Duplikat von [Regex zum Überprüfen, ob eine Zeichenfolge nicht übereinstimmende Klammern hat?] (Http://stackoverflow.com/questions/562606/regex-for-checking-if-a-string-has-mismatched-parentheses) – abccd
Mit Verweis zu [http://stackoverflow.com/questions/562606/regex-for-checking-if-a-string-has-mismatched-parentheses], Regex ist nicht für die Aufgabe geeignet. Die Art, wie du es machst, ist ideal. – Windmill