Skip to content

04-栈-LeetCode解题

本讲为数据结构和算法系列第四讲,聚焦栈结构原理与 LeetCode 经典题解。

核心内容

  • 栈的基本概念:LIFO 后进先出
  • 顺序栈与链式栈实现
  • 栈的应用场景:表达式求值、括号匹配、递归模拟
  • LeetCode 栈相关题目精讲
java
// 基于数组的栈实现
public class ArrayStack<T> {
    private Object[] data;
    private int top;

    public ArrayStack(int capacity) {
        this.data = new Object[capacity];
        this.top = -1;
    }

    public void push(T value) {
        if (top == data.length - 1) resize();
        data[++top] = value;
    }

    @SuppressWarnings("unchecked")
    public T pop() {
        if (top == -1) throw new EmptyStackException();
        return (T) data[top--];
    }

    @SuppressWarnings("unchecked")
    public T peek() { return (T) data[top]; }
    public boolean isEmpty() { return top == -1; }
}

LeetCode 题解:有效的括号

题目:给定只包含 () [] {} 的字符串,判断字符串是否有效。

java
public boolean isValid(String s) {
    ArrayStack<Character> stack = new ArrayStack<>(s.length());
    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();
}

复杂度分析

操作时间复杂度
pushO(1)
popO(1)
peekO(1)