LeetCode(Python3)[Valid Parentheses]
class Solution:
# @return a boolean
def isValid(self, s):
stack=[]
dict={"]":"[", "}":"{", ")":"("}
#一文字ずつチェック
for char in s:
if char in dict.values():
stack.append(char)
elif char in dict.keys():
if stack==[] or dict[char]!= stack.pop():
return False
else :
return False
return stack==[]
# class Solution:
# def isValid(self, s: str) -> bool:
# #要素数
# long=len(s)
# string=""
# #要素分チェック
# for i in range(long):
# #2つごとにチェック
# if i%2==0 and i!=(long-1):
# if s[i]=="[":
# if s[i+1]=="]":
# string += s[i]
# string += s[i + 1]
# elif s[i]=="{":
# if s[i+1]=="}":
# string += s[i]
# string += s[i + 1]
# elif s[i]=="(":
# if s[i+1]==")":
# string += s[i]
# string += s[i + 1]
# elif i==(long-1):
# string += s[i]
# else :
# string += ""
# if string == s:
# return True
# else:
# return False
今回の問題は、文字列の中に{},[]などの組がちょうど作られているかどうかの判定です。例えば、{ ] はFalseになります。
ポイントは、2点あります。
1つ目は、辞書の使用。なにかがセットで考えられるとき、辞書を使うと楽になるケースがあります。以下の様にキーとそのキーに対応する値で定めることが出来ます。また、dict.values(i)やdict.keys(i)で値やキーを指定してとってくることも可能です。
dict={"]":"[", "}":"{", ")":"("}
if char in dict.values():
elif char in dict.keys():
2点目は、popです。popは、最後に追加されたものを判断し持ってきます。
stack.pop():
コメントアウトされた部分は、失敗コード例です。横にちょうど組となる記号がないとTrueにならないように書いてしまっていました。