栈的弹出,压入序列
题目
思路
- 定义两个标记指针i,j i 指向压入序列 j 指向弹出序列
- 每次压栈后 peek栈顶元素 如果等于j指向的元素 则pop栈顶元素
- 如果栈中没有元素 且压入序列中所有元素都已经被压入过栈 则表示弹出序列是正确的 反之则错误
代码
import java.util.*;
public class Solution {
public boolean IsPopOrder(int [] pushA,int [] popA) {
Stack<Integer> stack = new Stack<>();
//栈用来存放插入序列
int j = 0;
for(int i = 0; i < pushA.length; i++){
stack.push(pushA[i]);
每次循环压入一个插入序列的数
while(!stack.empty() && j < pushA.length
&& stack.peek() == popA[j]){
//循环条件第一个保证栈中有元素
//第二个条件保证j不会越界
//第三个条件保证 栈顶元素和j指向的元素相同
stack.pop();
//弹出栈顶元素
j++;
//指针向后偏移指向下一个
}
}
return stack.empty();
//如果栈为空 返回true 否则返回false
}
}