20.有効なかっこ(Python)

1826 ワード

もっと素晴らしい内容は、「力ボタンの簡単な問題」に注目してください.
タイトル
難易度:★☆☆☆タイプ:スタック
'(',')','{','}','[',']'のみを含む文字列を与え,文字列が有効か否かを判断する.
有効な文字列は次のとおりです.
左かっこは同じタイプの右かっこで閉じる必要があります.左かっこは正しい順序で閉じなければなりません.注意空の文字列は有効な文字列とみなされます.

例1:
入力:()出力:true
例2:
入力:「()[]{}」出力:true
例3:
入力:[(]]出力:false
例4:
入力:「([)]出力:false
例5:
入力:{[]}出力:true
に答える
シナリオ1:文字列置換
1対の「()」「[]」または「{}」に遭遇すると、文字列から上記の重複する括弧がなくなるまで削除し、最終的に空き列が残っているか否かによって括弧が有効か否かを判断する.
class Solution:
    def isValid(self, s):
        while '{}' in s or '()' in s or '[]' in s:
            s = s.replace('{}', '')
            s = s.replace('[]', '')
            s = s.replace('()', '')
        return s == ''

シナリオ2:スタック
ここでは、スタックのデータ構造を使用して、このタスクを完了します.最初から最後まで文字列を巡回し、左かっこが発生するたびにそのかっこをスタックに押し込み、右かっこが発生するたびに現在のスタックトップ要素をポップアップし、現在の右カッコと一致するかどうかを観察し、一致しない場合はFalseに戻り、巡回が終了した後、スタックが空の場合はカッコが有効で、そうでない場合は無効でFalseに戻ります.
def isValid(self, s):
    #    list     
    ls = []
    parentheses = "()[]{}"
    for i in range(len(s)):
        #          
        if parentheses.find(s[i]) == -1:
            continue
        #      
        if s[i] == '(' or s[i] == '[' or s[i] == '{':
            ls.append(s[i])
            continue
        if len(ls) == 0:
            return False
        #         
        p = ls.pop()
        if (p == '(' and s[i] == ')') or (p == '[' and s[i] == ']') or (p == '{' and s[i] == '}'):
            continue
        else:
            return False
    if len(ls) > 0:
        return False
    return True

質問やアドバイスがあれば、コメントエリアへようこそ~