# Link: https://leetcode.com/problems/valid-parentheses/description/ class Solution: def isValid(self, s: str) -> bool: c = [] # Checker stack m = { ")": "(", "}": "{", "]": "[", } cb = m.keys() op = m.values() for char in s: if len(c) == 0: c.append(char) continue if char in op: c.append(char) continue if char in cb: if len(c) > 0 and c[-1] == m[char]: c.pop() continue if len(c) > 0 and c[-1] != m[char]: return False if len(c) == 0: return False print(f"c = {c} (len={len(c)})") return False if len(c) > 0 else True if __name__ == "__main__": tt = "()[]{}" sol = Solution print(f"Initial: {tt}") print(sol().isValid(tt)) print("-" * 60) tt = "()" print(f"Initial: {tt}") print(sol().isValid(tt)) print("-" * 60) tt = "())" print(f"Initial: {tt}") print(sol().isValid(tt)) print("-" * 60) tt = "([])" print(f"Initial: {tt}") print(sol().isValid(tt)) print("-" * 60) tt = "(" print(f"Initial: {tt}") print(sol().isValid(tt)) print("-" * 60) tt = "(])" print(f"Initial: {tt}") print(sol().isValid(tt)) print("-" * 60)