2017-06-20 3 views
0

Gibt es eine effiziente Methode, um herauszufinden, ob eine String-Eingabe korrekt verwendet wird?Überprüfen, ob eingegebene Klammern gültig sind

Also, "(()))()" ist richtig. "()() (" ist falsch "hallo() (.)" Nicht korrekt ist

ich dies versucht haben:..

def valid_parentheses(string): 
    utilList = [] for i in string:  
     utilList.append(i) 
    open = utilList.count("(") 
    close = utilList.count(")") 
    if (open + close) % 2 == 0: 
     return True 
    else: 
     return False 
+1

Was haben Sie bisher versucht? – asongtoruin

+0

Sie können rekursiv \ iterativ suchen und ersetzen ''()'' mit ''' und sehen, ob die Zeichenfolge leer ist –

+0

Mögliche Duplikate von [Python-Programm zum Überprüfen der Übereinstimmung von einfachen Klammern] (https : //stackoverflow.com/questions/38833819/python-program-to-check-matching-of-simple-parentheses) –

Antwort

1

Sie nur Schleifenzählung durch Ihren Text und halten + 1 für (, -1 für ) Am Ende der Schleife sollte der Zähler 0 sein.Wenn der Zähler jemals negativ wird, können Sie früh verlassen, wenn Sie wissen, dass sie nicht ausgeglichen sind.

+0

"hi()) (" würde zu 0 hinzufügen, aber die endgültige Verwendung von ") (" ist falsch. – Enesxg

+0

@Enesxg Sie würden früh am zweiten ')' in diesem Beispiel beenden, weil der Zähler -1 wäre . –

+0

Danke, Bill the Lizard – Enesxg

0

Verwenden Sie eine Variable, um die Klammerverschachtelungsebene beginnt bei 0.

Iterieren durch die Zeichenfolge. Jedes Mal, wenn Sie eine offene Klammer erreichen, fügen Sie 1 die Verschachtelungsebene hinzu. Subtrahiere 1 jedes Mal, wenn du eine schließende Klammer erreichst.

Wenn die Zahl immer negativ ist oder wenn die Zahl am Ende der Zeichenfolge nicht null ist, sind die Klammern falsch.

+0

"hi()) (" würde zu 0 hinzufügen, aber die endgültige Verwendung von ") (" ist falsch. – Enesxg

+0

Überprüfen Sie die Bearbeitung zu meinem Beitrag – Enesxg

Verwandte Themen