维持一个栈,若栈顶元素与pop序列当前元素不相等,则一直压栈,否则栈顶出栈。若最终栈为空,则匹配。
public boolean IsPopOrder(int [] pushA,int [] popA) {
if(pushA==null||popA==null||pushA.length==0||popA.length==0) return false;
int length=pushA.length;
int[] mystack=new int[length];
int top=-1,pushIndex=0;
mystack[++top]=pushA[pushIndex++];
for(int i=0;i<length;i++){
while(popA[i]!=mystack[top]&&pushIndex<length)
mystack[++top]=pushA[pushIndex++];//若栈顶元素与pop[i]不相等,就一直压栈
if(popA[i]!=mystack[top]) return false;//若全部压栈仍然不相等,返回false,无此元素
else top--;//相等则弹出栈顶元素
}
if(top==-1) return true;//全部出栈则匹配
return false;
}