题目
给定2个序列,一个为push序列,判断另一个序列有没有可能为对应的pop序列;
比如,push序列–1,2,3,4,5;则4,5,3,2,1可能是一个pop序列;
实现
思路:
创建一个栈;
- 将push序列依次入栈,直到栈顶元素等于pop序列的第一个元素;
- 将栈顶元素出栈,pop序列移动到第二个元素;
- 如果栈顶元素继续等于pop序列,则继续出栈,pop后移动;
- 如果push全部入完栈,且pop序列没有遍历完,且栈顶元素不等于pop当前元素;则返回false;
- 如果栈为空,且pop序列遍历完;则返回true;
代码实现:
public static boolean isPopSeries(int[] push,int[] pop,int n){
int i=0,j=0;
Stack<Integer> stack=new Stack<Integer>();
while(i<n){
stack.push(push[i]);
i++;
while(!stack.isEmpty() && stack.peek()==pop[j]){
stack.pop();
j++;
}
}
if(stack.isEmpty() && j==n){
return true;
}
return false;
}