Learn to implement and use stack and queue data structures for solving problems.
Opening
( { [
Closing
) } ]
Map<Character, Character> bracketPairs = new HashMap<>();
bracketPairs.put('(', ')');
bracketPairs.put('{', '}');
bracketPairs.put('[', ']');
Set<Character> openBrackets = new HashSet<>(Arrays.asList('(', '{', '['));
Set<Character> closeBrackets = new HashSet<>(Arrays.asList(')', '}', ']'));
public static boolean isValidBracketSequence(String sequence) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < sequence.length(); i++) {
char ch = sequence.charAt(i);
if (!openBrackets.contains(ch) && !closeBrackets.contains(ch)) {
continue;
}
if (openBrackets.contains(ch)) {
stack.push(ch);
} else {
if (stack.isEmpty()) {
return false;
}
char lastOpen = stack.pop();
if (bracketPairs.get(lastOpen) != ch) {
return false;
}
}
}
return stack.isEmpty();
}
// Inside the for loop from step 2
if (openBrackets.has(char)) {
// If it's an opening bracket, push to stack
stack.push(char);
} else {
// Handle closing brackets
}
// Inside the else block from step 3
// If stack is empty, no matching open bracket
if (stack.length === 0) {
return false;
}
// Get the last open bracket
const lastOpen = stack.pop();
// Check if brackets match
if (bracketPairs[lastOpen] !== char) {
return false;
}
public static boolean isValidBracketSequence(String sequence) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < sequence.length(); i++) {
char ch = sequence.charAt(i);
if (!openBrackets.contains(ch) && !closeBrackets.contains(ch)) {
continue;
}
if (openBrackets.contains(ch)) {
stack.push(ch);
} else {
if (stack.isEmpty()) {
return false;
}
char lastOpen = stack.pop();
if (bracketPairs.get(lastOpen) != ch) {
return false;
}
}
}
return stack.isEmpty();
}
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 {
constructor() {
this.stackNewest = []; // for enqueue
this.stackOldest = []; // for dequeue
}
enqueue(value) {
// Your code here
}
dequeue() {
// Your code here
}
peek() {
// Your code here
}
isEmpty() {
// Your code here
}
}
If you want more practice with stacks and queues, check out these LeetCode problems: