检验一个序列是不是出栈序列
package mypack12;
import java.util.Stack;
public class Solution {
/*
*pushA 压入栈数组
*popA 出栈数组
*s 辅助栈
*popIndex 弹出序列的位置标志
*
* 这几个简单变量的组合就可以构造出一个规范的世界,完成这个世界的特定功能
* */
// 压入栈数组 出栈数组
public boolean ISPopOrder(int [] pushA,int [] popA ){
//一定要弄清楚每一个变量表示的含义
//压入数组元素的长度或者,删除元素的数组的长度==0
if(pushA.length==0||popA.length==0)
return false;
//返回一个false
//创建一个栈
Stack<Integer> s=new Stack<>();
//用于表示弹出序列的位置
int popIndex=0;
for (int i = 0; i <pushA.length; i++) {
//把压入栈数组的每个元素压入栈
s.push(pushA[i]);
//如果栈不为空,且栈顶元素等于弹出序列
while (!s.empty()&&s.peek()==popA[popIndex]){
//辅助栈 栈顶元素 删除
s.pop();
//出栈数组 向后一位
popIndex++;
}
//以此循环持续比较
}
return s.empty();
}
public static void main(String[] args) {
int a[]={1,2,3,4,5};
int b[]={4,5,3,2,1};
Solution solution=new Solution();
boolean b1 = solution.ISPopOrder(a, b);
System.out.println(b1);
}
}
关键:借助一个辅助栈