简述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
数组中的当前元素匹配。如果匹配,我们就将栈顶元素弹出,并继续检查下一个元素。最后,如果栈为空,那么说明所有的出栈操作都是合法的,因此这两个序列是匹配的。否则,这两个序列就不匹配。