# [Valid Parentheses](https://leetcode.com/problems/valid-parentheses/) ###### tags: `Leetcode`, `Easy`, `Stack` ## Approach * We use a stack * Map every closing bracket to its opening bracket * Every time we see an opening bracket, we add it to the stack * Every time we see a closing brackt, we check if the top element is the corresponding opening bracket ## Asymptotic Analysis ### Time Complexity: **O(N)** ### Space Complexity: **O(N)** ## Code ``` python class ValidParentheses: BRACKETS = { ']': '[', ')': '(', '}': '{' } def is_valid(self, s: str) -> bool: stack = [] for char in s: if ((char in self.BRACKETS.keys() and not stack) or (char in self.BRACKETS.keys() and stack and self.BRACKETS[char] != stack.pop())): return False elif char in self.BRACKETS.values(): stack.append(char) return stack == [] string1, string2, string3 = '}{', '[()]{}', '()]]' print("Validating parentheses for " + string1 + " : " + str(ValidParentheses().is_valid(string1))) print("Validating parentheses for " + string2 + " : " + str(ValidParentheses().is_valid(string2))) print("Validating parentheses for " + string3 + " : " + str(ValidParentheses().is_valid(string3))) ```