본문 바로가기

Algorithm/LeetCode

[LeetCode][Python3] 20. Valid Parentheses

반응형

 

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를 유도한다.

반응형