Python:CodeTaka 2週目3
Q.質問:sは複数の括弧からなるStringパラメータです。true/false、sが有効かどうかを返してください。
「(」、「)」、「[」、「]」、「{」、「}」の6種類があります。次の場合に有効です。
カッコ
s = "()"
return true
s = "()[]{}"
return true
s = "(]"
return false
s = "([)]"
return false
s = "{[]}"
return true
私の答え
def is_valid(string):
if not string or len(string) == 1:
return False
a_dic = {"(": 1, "[": 1, "{": 1, ")": 0, "]": 0, "}": 0}
b_dic = {")": "(", "}": "{", "]": "["}
temp = []
for index in range(len(string)):
if index == 0 and a_dic[string[index]] == 0:
return False
if a_dic[string[index]] != 0:
temp.append(string[index])
else:
if temp[-1] != b_dic[string[index]]:
return False
else:
temp.pop()
return True
に感銘を与える
この問題は何か解けないところがあるようで、1時間30分に決めました.
括弧が閉じられている場合は、次のような括弧を作成して、対応する括弧を検索することが望ましい.
b_dic = {")": "(", "}": "{", "]": "["}
しかし、これは効率的なコードだとは思いません.ソリューション
def is_valid(string):
left = ['(', '{', '[']
right = [')', '}', ']']
stack = []
for letter in string:
if letter in left:
stack.append(letter)
elif letter in right:
if len(stack) <= 0:
return False
if left.index(stack.pop()) != right.index(letter):
return False
return len(stack) == 0
Reference
この問題について(Python:CodeTaka 2週目3), 我々は、より多くの情報をここで見つけました https://velog.io/@pm1100tm/Python-Code-Taka-9일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol