Instructions
Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
An input string is valid if:
Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
examples
Input: s = "()[]{}"
Output: true
Input: s = "(]"
Output: false
Approach
In this problem, we are mainly concerned about the most recent parenthesis we encounter such that if it is a closing parenthesis, we match it to an open parenthesis previously encountered. If there is no open parenthesis occurring before the closing, then the string is not a valid parenthesis.
Since we are interested in the most recent character, we can use the stack data structure, which implements Last In First Out (LIFO) behavior.
Therefore, the last item to go into the stack is the first to be removed.
So we push the open parenthesis, and when we encounter its matching closing parenthesis, we pop it (the opening parenthesis) from the stack.
For a valid parenthesis string s, the end result will be an empty stack; if the stack is not empty, then s is not a valid parenthesis.
Python Implementation
Breakdown
Initialize stack to add and pop from
Initialize a dictionary of the brackets where closing is the key and opening is the value.
Loop through given string; if element in string is in the dictionary keys, check if the stack is empty
and if element at stack[-1] ie most recent element is equal to element at dict[i] and remove this bracket from the stack.
Note: if the stack is empty we return False because a valid string cannot begin with a closing parenthesis.if the above conditions are not met we immediately return false
else we append to the stack because that means the element in the string is an opening parenthesis.
Code
def isValid(self, s):
parentheses = {'}': '{', ']': '[', ')': '('}
stack = []
for i in s:
if i in parentheses:
if stack and stack[-1] == parentheses[i]:
stack.pop()
else:
return False
else:
stack.append(i)
return not stack
Time Complexity
O(n)
The algorithm scales linearly as the input increases.
Space Complexity
The space complexity is O(n) because, in the worst-case scenario where all elements are opening brackets, we will have to store n elements in the stack.
Top comments (0)