跳到主要内容

简述Java实现栈的压入、弹出序列是否匹配 ?

参考答案:

在Java中,我们可以使用java.util.Stack类来实现栈的操作。栈是一种后进先出(LIFO)的数据结构,我们可以使用它来验证一组入栈和出栈序列是否匹配。

为了验证入栈和出栈序列是否匹配,我们可以模拟整个入栈和出栈的过程。如果所有的出栈操作都是合法的(即,每次出栈的元素都是最后入栈的元素),那么这两个序列就是匹配的。

以下是一个简单的Java方法,用于验证入栈和出栈序列是否匹配:

import java.util.Stack;

public class StackValidator {

    public static boolean validateStackSequences(int[] pushed, int[] popped) {
        if (pushed == null || popped == null || pushed.length != popped.length) {
            return false;
        }

        Stack<Integer> stack = new Stack<>();
        int i = 0;

        for (int num : pushed) {
            stack.push(num);

            // 检查栈顶元素是否与出栈序列的当前元素匹配
            while (!stack.isEmpty() && stack.peek() == popped[i]) {
                stack.pop();
                i++;
            }
        }

        // 如果栈为空,那么所有的出栈操作都是合法的
        return stack.isEmpty();
    }

    public static void main(String[] args) {
        int[] pushed = {1, 2, 3, 4, 5};
        int[] popped = {4, 5, 3, 2, 1};

        System.out.println(validateStackSequences(pushed, popped));  // 输出:true
    }
}

在这个例子中,我们首先将pushed数组中的元素依次压入栈中。然后,我们检查栈顶元素是否与popped数组中的当前元素匹配。如果匹配,我们就将栈顶元素弹出,并继续检查下一个元素。最后,如果栈为空,那么说明所有的出栈操作都是合法的,因此这两个序列是匹配的。否则,这两个序列就不匹配。