What is the main idea behind using a stack to check balanced parentheses?
Use a stack to keep track of opening parentheses. For every closing parenthesis, pop from the stack and check if it matches the last opening one. If all match and stack is empty at the end, parentheses are balanced.
Click to reveal answer
beginner
Which characters do we push onto the stack when checking balanced parentheses?
We push only opening parentheses characters like '(', '{', '[' onto the stack.
Click to reveal answer
beginner
What should happen if a closing parenthesis does not match the top of the stack?
It means the parentheses are not balanced. We should stop and return false immediately.
Click to reveal answer
beginner
Why must the stack be empty at the end of the check?
If the stack is not empty, it means there are unmatched opening parentheses left, so the expression is not balanced.
Click to reveal answer
intermediate
In Go, which data structure is commonly used to implement a stack for this problem?
A slice of runes or strings is commonly used as a stack in Go, using append to push and slicing to pop.
Click to reveal answer
What do you do when you encounter an opening parenthesis in the string?
APush it onto the stack
BPop from the stack
CIgnore it
DReturn false immediately
✗ Incorrect
Opening parentheses are pushed onto the stack to be matched later.
What indicates that the parentheses are balanced after processing the entire string?
AStack has some elements
BStack is empty
CFirst character is a closing parenthesis
DString length is even
✗ Incorrect
If the stack is empty, all opening parentheses were matched correctly.
What should you do if you find a closing parenthesis but the stack is empty?
APush the closing parenthesis onto the stack
BIgnore it
CReturn false immediately
DContinue checking
✗ Incorrect
A closing parenthesis without a matching opening one means unbalanced parentheses.
Which Go slice operation is used to pop the top element from the stack?
Astack = stack[:len(stack)-1]
Bstack = stack[1:]
Cstack = append(stack, element)
Dstack = stack + element
✗ Incorrect
Removing the last element from the slice simulates popping from the stack.
Which of these is NOT a valid opening parenthesis character in this problem?
A(
B{
C[
D)
✗ Incorrect
')' is a closing parenthesis, not an opening one.
Explain step-by-step how a stack helps to check if parentheses in a string are balanced.
Think about how last opened parentheses must close first.
You got /4 concepts.
Describe how you would implement a balanced parentheses checker in Go using a slice as a stack.
Remember Go slices can be used with append and slicing.
You got /6 concepts.
Practice
(1/5)
1. What is the main purpose of using a stack in the Balanced Parentheses Problem?
easy
A. To keep track of opening parentheses and match them with closing ones
B. To count the total number of parentheses in the string
C. To reverse the string of parentheses
D. To sort the parentheses in order
Solution
Step 1: Understand the role of stack in parentheses matching
The stack stores opening parentheses as they appear to check if each closing parenthesis matches the last opened one. Counting or reversing parentheses does not help in matching pairs correctly; sorting changes the order and breaks the sequence.
Final Answer:
To keep track of opening parentheses and match them with closing ones -> Option A
Quick Check:
Stack usage = matching parentheses [OK]
Hint: Stack stores last opened parenthesis to match closing one [OK]
Common Mistakes:
Thinking stack counts parentheses instead of matching
Assuming stack reverses the string
Believing sorting helps in matching parentheses
2. Which of the following Go code snippets correctly pushes an opening parenthesis '(' onto a stack represented by a slice of runes named stack?
easy
A. stack = append(stack, '(')
B. stack.push('(')
C. stack.add('(')
D. stack.insert('(')
Solution
Step 1: Recall how to add elements to a slice in Go
In Go, slices use the built-in append function to add elements at the end. Since stack is a slice, stack = append(stack, '(') correctly adds '(' to the top.
Final Answer:
stack = append(stack, '(') -> Option A
Quick Check:
Use append to push in Go slices [OK]
Hint: Use append(slice, value) to push in Go [OK]
Common Mistakes:
Using non-existent methods like push or add on slices
Forgetting to assign back after append
Using incorrect method names
3. What will be the output of the following Go code snippet that checks if the string "([])" has balanced parentheses?
func isBalanced(s string) bool {
stack := []rune{}
for _, ch := range s {
if ch == '(' || ch == '[' {
stack = append(stack, ch)
} else if ch == ')' {
if len(stack) == 0 || stack[len(stack)-1] != '(' {
return false
}
stack = stack[:len(stack)-1]
} else if ch == ']' {
if len(stack) == 0 || stack[len(stack)-1] != '[' {
return false
}
stack = stack[:len(stack)-1]
}
}
return len(stack) == 0
}
fmt.Println(isBalanced("([])"))
medium
A. runtime error
B. false
C. true
D. compilation error
Solution
Step 1: Trace the stack operations for "([])"
Push '(' then push '['; on encountering ']', pop '['; on encountering ')', pop '('; stack ends empty, so function returns true indicating balanced parentheses.
Final Answer:
true -> Option C
Quick Check:
Stack empty after matching = true [OK]
Hint: Empty stack after processing means balanced [OK]
Common Mistakes:
Not popping matching opening bracket
Confusing bracket types
Ignoring empty stack check before pop
4. Identify the bug in the following Go function that checks balanced parentheses:
func isBalanced(s string) bool {
stack := []rune{}
for _, ch := range s {
if ch == '(' {
stack = append(stack, ch)
} else if ch == ')' {
if len(stack) == 0 || stack[len(stack)-1] != ')' {
return false
}
stack = stack[:len(stack)-1]
}
}
return len(stack) == 0
}
medium
A. Stack is not initialized properly
B. The condition checks for ')' instead of '(' when popping
C. The loop does not iterate over the string
D. The function does not return any value
Solution
Step 1: Analyze the popping condition for closing parenthesis
The code checks if the top of stack is ')', but it should check for '(' to match correctly. Since stack stores '(', checking for ')' fails to match and returns false incorrectly.
Final Answer:
The condition checks for ')' instead of '(' when popping -> Option B
Quick Check:
Match top stack with '(' for ')' closing [OK]
Hint: Match closing bracket with correct opening bracket on stack top [OK]
Common Mistakes:
Checking wrong character on stack top
Not handling empty stack before pop
Ignoring matching pairs logic
5. Given the string "{[()()]()}", which includes curly braces {}, square brackets [], and parentheses (), how should the stack-based algorithm be modified to correctly check for balanced parentheses of all three types?
hard
A. Replace stack with a queue to handle all bracket types
B. Only check for parentheses '()' and ignore other types
C. Use two separate stacks for different bracket types
D. Add conditions to push '{', '[', '(' and pop matching '}', ']', ')' accordingly
Solution
Step 1: Extend push logic for all opening brackets
Push '{', '[', '(' onto the stack when encountered to track all opening brackets. When encountering '}', ']', or ')', check if the top of the stack matches '{', '[', or '(' respectively before popping.
Final Answer:
Add conditions to push '{', '[', '(' and pop matching '}', ']', ')' accordingly -> Option D
Quick Check:
Match all bracket types with stack push/pop [OK]
Hint: Push all openings; pop only if top matches corresponding closing [OK]
Common Mistakes:
Ignoring curly braces in the algorithm
Using multiple stacks unnecessarily
Replacing stack with queue which breaks LIFO logic
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.