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}]"))