Learn to implement and use stack and queue data structures for solving problems.
Opening
( { [
Closing
) } ]
bracket_pairs = {
'(': ')',
'{': '}',
'[': ']'
}
open_brackets = {'(', '{', '['}
close_brackets = {')', '}', ']'}
def is_valid_bracket_sequence(sequence):
stack = []
for char in sequence:
# Skip non-bracket characters
if char not in open_brackets and char not in close_brackets:
continue
# Handle logic here
return len(stack) == 0
# Inside the for loop from step 2
if char in open_brackets:
# If it's an opening bracket, push to stack
stack.append(char)
else:
# Handle closing brackets
pass
# Inside the else block from step 3
# If stack is empty, no matching open bracket
if len(stack) == 0:
return False
# Get the last open bracket
last_open = stack.pop()
# Check if brackets match
if bracket_pairs[last_open] != char:
return False
def is_valid_bracket_sequence(sequence):
stack = []
for char in sequence:
# Skip non-bracket characters
if char not in open_brackets and char not in close_brackets:
continue
if char in open_brackets:
# If it's an opening bracket, push to stack
stack.append(char)
else:
# If stack is empty, no matching open bracket
if len(stack) == 0:
return False
# Get the last open bracket
last_open = stack.pop()
# Check if brackets match
if bracket_pairs[last_open] != char:
return False
# Valid only if all brackets were matched
return len(stack) == 0
Now that you've learned how to validate bracket sequences using a stack, try implementing a queue with a twist.
Create a queue data structure using two stacks. Your implementation should include these methods:
enqueue(element)
: Add element to the queuedequeue()
: Remove and return the front elementpeek()
: Return (without removing) the front elementisEmpty()
: Return true if queue is emptyclass StackQueue:
def __init__(self):
self.stack_newest = [] # for enqueue
self.stack_oldest = [] # for dequeue
def enqueue(self, value):
self.stack_newest.append(value)
def dequeue(self):
if not self.stack_oldest:
while self.stack_newest:
self.stack_oldest.append(self.stack_newest.pop())
if self.stack_oldest:
return self.stack_oldest.pop()
return None
def peek(self):
if not self.stack_oldest:
while self.stack_newest:
self.stack_oldest.append(self.stack_newest.pop())
if self.stack_oldest:
return self.stack_oldest[-1]
return None
def is_empty(self):
return not self.stack_newest and not self.stack_oldest
If you want more practice with stacks and queues, check out these LeetCode problems: