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にならないように書いてしまっていました。

この記事が気に入ったらサポートをしてみませんか?