Q10: How do you validate balanced brackets and parentheses using a Stack?

Traverse the string character by character. When encountering an opening bracket ((, {, [), push its corresponding matching closing bracket onto a Deque<Character> stack. When encountering a closing bracket, check if the stack is empty or if the popped element matches. Return stack.isEmpty() at the end.

Stack Parentheses Validation
import java.util.ArrayDeque;
import java.util.Deque;

public class ValidParentheses {
    public static boolean isValid(String s) {
        Deque<Character> stack = new ArrayDeque<>();
        for (char c : s.toCharArray()) {
            if (c == '(') stack.push(')');
            else if (c == '{') stack.push('}');
            else if (c == '[') stack.push(']');
            else if (stack.isEmpty() || stack.pop() != c) return false;
        }
        return stack.isEmpty();
    }
}
💡 Pushing expected closing brackets makes matching simple.
Key Takeaways
  • Push expected closing characters to simplify validation logic.
  • Return stack.isEmpty() to handle unclosed opening brackets.
Knowledge Check

What is the stack state when processing an invalid input string with unmatched opening brackets like "((("?