diff --git a/0020_valid-parentheses/README.md b/0020_valid-parentheses/README.md new file mode 100644 index 0000000..43031f7 --- /dev/null +++ b/0020_valid-parentheses/README.md @@ -0,0 +1,29 @@ +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. + +**Example 1:** + + Input: s = "()" + Output: true + + +**Example 2:** + + Input: s = "()[]{}" + Output: true + + +**Example 3:** + + Input: s = "(]" + Output: false + + +**Constraints:** + +* `1 <= s.length <= 104` +* `s` consists of parentheses only `'()[]{}'`. \ No newline at end of file diff --git a/0020_valid-parentheses/python3/solution.py b/0020_valid-parentheses/python3/solution.py new file mode 100644 index 0000000..ed31f85 --- /dev/null +++ b/0020_valid-parentheses/python3/solution.py @@ -0,0 +1,30 @@ +from collections import deque + +class Solution: + bracket_pairing = { + '{': '}', + '[': ']', + '(': ')' + } + + closing_brackets = tuple(bracket_pairing.values()) + + def is_matching_pair(self, opening, closing): + return self.bracket_pairing[opening] == closing + + def isValid(self, s: str) -> bool: + stack = deque() + + for c in s: + if c in self.closing_brackets: + try: + last_char = stack.pop() + except IndexError: + return False + + if not self.is_matching_pair(last_char, c): + return False + else: + stack.append(c) + + return len(stack) == 0