Skip to main content

0020 - Valid Parentheses

大意描述

匹配小中大括號('(', ')', '{', '}', '[' and ']' )沒了

範例最多給成 "()[]{}" 但實際上還有類似 "{()}" 這種東西,所以不要偷懶 :Kappa:

個人想法

直接用 Stack 的觀念,每次都把暫存在 Stack 內的東西拿出來比較比較,沒有匹配就兩兩丟 Stack,符合就丟掉,直到 Stack 為空代表語法正確:

class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        if len(s) < 2:
            return False
        
        barket_stack = []
        
        for ch in s:
            if len(barket_stack) == 0:
                barket_stack.append(ch)
                continue
            
            temp = barket_stack.pop()

            if temp == '(' and ch == ')':
                continue
            if temp == '[' and ch == ']':
                continue
            if temp == '{' and ch == '}':
                continue
            barket_stack.append(temp)
            barket_stack.append(ch)
        
        return len(barket_stack) == 0

看網路上的解法好像差不多也是這樣,但其實上面的寫法還可以優化,例如以 Python 來說真要拿出來看的話,用 slice 就好(list[-1]),或是少寫一點 if。