1.题目
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。
假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。
2.分析
建立一个栈,按照压栈序列依次进行入栈操作,按出栈序列的顺序依次弹出数字。
在出栈时,若下一个要出栈的数字与栈顶数字相同则弹出。如果压栈序列中的所有数字都入栈后没有完全出栈成功则代表两个序列不匹配,返回false。
3.程序
1 package first; 2 3 import java.util.Stack; 4 5 public class StackPushPopOrder { 6 public boolean isPopOrder(int [] pushA,int [] popA) { 7 if(pushA==null || popA==null) 8 return false; 9 Stack<Integer> stack = new Stack<Integer>(); 10 //必须提前判断长度是否相等 11 if(popA.length!=pushA.length || pushA.length==0) 12 return false; 13 int popIndex=0; 14 for(int pushIndex=0; pushIndex<pushA.length; pushIndex++) { 15 stack.push(pushA[pushIndex]); 16 while(!stack.empty() &&stack.peek()==popA[popIndex]) { 17 stack.pop(); 18 popIndex++; 19 } 20 } 21 return stack.empty(); 22 } 23 }