[leetcode-python3] 20. Valid Parentheses

shsh·2020년 12월 10일
0

leetcode

목록 보기
28/161

20. Valid Parentheses - python3

Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

An input string is valid if:

  1. Open brackets must be closed by the same type of brackets.
  2. Open brackets must be closed in the correct order.

처음 든 생각: 스택을 쓰자

My Answer 1: Wrong Answer

class Solution:
    def isValid(self, s: str) -> bool:
        if len(s)%2 != 0:
            return False
        
        result = False
        stack = []
        for i in range(0, len(s)):
            stack.append(s[i])
        
        for i in range(0, len(s)):
            if s[i] == '(':
                for j in range(len(stack)-i-1, 0, -1):
                    if stack[-j] == ')' and (i+j)%2 != 0:
                        result = True
                        break
            if s[i] == '{':
                for j in range(len(stack)-i-1, 0, -1):
                    if stack[-j] == '}' and (i+j)%2 != 0:
                        result = True
                        break
            if s[i] == '[':
                for j in range(len(stack)-i-1, 0, -1):
                    if stack[-j] == ']' and (i+j)%2 != 0:
                        result = True
                        break
        
        return result

이중 for 문 Hi~~

반복문의 범위도 직접 계산해서 정하고..
괄호 쌍 사이엔 짝수개의 문자만 들어간다는 점도 고려해서 계산하고..
여러모로 나름대로 계산을 해봤으나.. 뭔가 이상..

그냥 애초에 잘못된 코드임

stack 의 pop 이 필요할 것 같다

Other Answer 1: (Runtime: 20 ms - 98.83% / Memory Usage: 14.4 MB - 11.65%)

class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        for ch in s:
            if ch =='(':
                stack.append(')')
            elif ch =='{':
                stack.append('}')
            elif ch =='[':
                stack.append(']')                
            else:
                if len(stack) == 0:
                    return False
                if ch != stack.pop():
                    return False

        return len(stack) == 0

내가 꿈꿔온 코드는 이거였다............
stack 을 사용한 코드

괄호의 짝꿍을 찾아 stack 에 넣어줌
짝꿍이 없거나 순서가 바껴서 오면 False

string 도 for ch in s 의 형태로 사용 가능하단 걸 첨 알았다
이걸 몰라서 아까 그렇게 지저분했는데..

그냥 이 코드를 냅다 외우기로.^^

profile
Hello, World!

0개의 댓글

관련 채용 정보