メインコンテンツへスキップ

NeetCode 150 [Stack]:easy

· loading · loading ·
kiitosu
著者
kiitosu
画像処理やデバイスドライバ、データ基盤構築からWebバックエンドまで、多様な領域に携わってきました。地図解析や地図アプリケーションの仕組みにも経験があり、幅広い技術を活かした開発に取り組んでいます。休日は草野球とランニングを楽しんでいます。
目次

NeetCodeのSolutionを書いていく
#

Valid Parentheses
#

() {} [] に囲まれている文字列を有効とする。

  • 全てのカッコは同じ種類のカッコで閉じられている必要がある。
  • カッコは正しい順番で閉じられる必要がある。
  • 全ての閉じるカッコは適切な開けるカッコが必要である。

Stackという商の問題なので、FILOのStackに積んでいけばいいってことだよね。 ‘(’ ならば ‘)’ を、’{’ ならば ‘}’ を ‘[’ ならば ‘]‘をスタックに積んで次のカッコはそれである必要がある。

class Solution:
    def isValid(self, s: str) -> bool:
        parentheses = {"(": ")", "{": "}", "[": "]"}
        open = ["(", "{", "["]
        close = [")", "}", "]"]
        stack: list[str] = []
        for c in s:
            if c in open:
                stack.append(parentheses[c])
            elif c in close:
                if len(stack) == 0:
                    return False
                if stack[-1] == c:
                    stack.pop()
                else:
                    return False
            else:
                pass
        return len(stack) == 0

あと、開くカッコだけの場合、閉じるカッコが最初に来る場合、もケアしないとだめだった。 開くカッコだけのケアのためには、最後にスタックが0になることを確認。 閉じるカッコが最初に来るのはスタックに何も積まれていないのに閉じるカッコが来たかの確認で実施。

解法に記載されたアルゴリズムが面白い。

class Solution:
    def isValid(self, s: str) -> bool:
        while '()' in s or '{}' in s or '[]' in s:
            s = s.replace('()', '')
            s = s.replace('{}', '')
            s = s.replace('[]', '')
        return s == ''

これって文字列にはカッコしか含まれていないってことなんか。 たしかにだとすればこれで行けるか。 問題を正確に読むことの(書くこと?)の難しさよ。

Reply by Email

関連記事

NeetCode 150 [Arrays & Hashing]:easy
· loading · loading
dynamodb stream -> event bridge pipesで失敗した時にDLQにメッセージが届かない
· loading · loading
androidのbackground taskについて
· loading · loading