import java.util.Stack;
public class test22 {
public boolean IsPopOrder(int [] pushA,int [] popA) {
boolean flag = false;
//都是一個元素的時候直接判斷
if(pushA.length == 1 && popA.length == 1 && popA[0] == pushA[0]){
return true;
}
if(pushA.length == 1 && popA.length == 1 && popA[0] != pushA[0]){
return false;
}
if(popA != null && pushA != null){ //兩個序列都為空,直接傳回
Stack<Integer> stack = new Stack<>();
int i = 0; //push的指針
int j = 0; //pop的指針
//檢查每個出棧
while(j < popA.length){
//push中的數是否村入棧
while(i < pushA.length && pushA[i] != popA[j]){
stack.push(pushA[i]);
i++;
}
//相等的元素直接就過去了
++i;
++j;
//定義接下來要出棧元素
int top = 0;
//如果要出棧的元素和pop相等,就一直出
while(!stack.isEmpty() && (top = stack.pop()) == popA[j]){
++j;
}
//如果不等了,還放回去
if(j < popA.length){
stack.push(top);
}
//當找不到合适出棧元素時,push已經放完了,stack因為不相等也彈不出來,就結束
if(i >= pushA.length && !stack.isEmpty()){
break;
}
}
if(stack.isEmpty()){
flag = true;
}
}
return flag;
}
}