0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

pythonでコーディング問題を解く2

Posted at

https://qiita.com/tosei/items/cadad781501150e3bddf
続きです

問題

( { [ ) } ] ] もしくはそれ以外の文字からなる文字列に対し、カッコが正しく対応しているか判定する関数を作成してください。
カッコが正しく対応しているとは、文字列中で開いたカッコがすべて閉じていることをいいます。


[{()}] → OK
[{()} → 閉じていないのでNG
[({)}] → 閉じていないのでNG
[a{(1)2}] → かっこ同士がとしているのでOK

def getLeft(right) :
    if right == "}" :
        return "{"
    elif right == "]" :
        return "["
    elif right == ")" :
        return "("
    else:
        return null

def checkParentheses(str) :
    str = list(str)
    stack = []
    
    while len(str) > 0 :
    
        # 先頭の文字を取得して削除(jsのshiftに当たる処理)
        text = str.pop(0)

        # 左かっこならスタックに追加
        if text == "{" or text == "[" or text == "(" :
            stack.append(text)
    
        # 右かっこならスタックから取り出して閉じている関係になるかをチェックする
        elif text == "}" or text == "]" or text == ")" :
            left = stack.pop()
            right = text

            if left != getLeft(right) :
                return False
    
    # スタックが空ならばtrue
    return len(stack) == 0

print(checkParentheses("[{()}]"))
print(checkParentheses("[{()}"))        
print(checkParentheses("[({)}]"))
print(checkParentheses("[a{(1)2}]"))
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?