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