반응형
class Solution:
def isValid(self, s: str) -> bool:
stack=[]
if(len(s)%2==1): return False
for c in s:
if(c=="(" or c=="[" or c=="{"):
stack.append(c)
else:
if len(stack)==0: return False
popItem = stack.pop()
if(popItem == '('):
if(c==')'): continue
else: return False
elif(popItem == '['):
if(c==']'): continue
else: return False
elif(popItem == '{'):
if(c=='}'): continue
else: return False
if len(stack)==0:
return True
else:
return False
풀이
1. s의 길이가 홀수이면 False
2. 여는 괄호면 stack에 넣고 닫는괄호면 stack에서 pop한 후 popItem과 닫는괄호가 같은 종류인지 확인
3. s를 다 읽기 전에 stack이 empty면 False
LeetCode 코드
class Solution:
def isValid(self, s: str) -> bool:
stack = []
mapping = {")": "(", "}": "{", "]": "["}
for char in s:
if char in mapping:
top = stack.pop() if stack else '#'
if mapping[char] != top:
return False
else:
stack.append(char)
return not stack
1. dictionary를 통해 좀더 간단하게 표현
2.
top = stack.pop() if stack else '#'
stack이 차있으면 stack.pop()을 실행하고 그렇지 않으면 top에 #이란 값을 넣어 false를 유도한다.
반응형
'Algorithm > LeetCode' 카테고리의 다른 글
[LeetCode][Python3] 98. Validate Binary Search Tree (0) | 2020.12.27 |
---|---|
[LeetCode][Python3] 17. Letter Combinations of a Phone Number (0) | 2020.12.27 |
[LeetCode][Python3] 21. Merge Two Sorted Lists (0) | 2020.12.26 |
[LeetCode][Python3] 14. Longest Common Prefix (0) | 2020.12.26 |
[LeetCode][Python3] 1.two-sum (0) | 2020.12.24 |