题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出序列。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。

       如果下一个弹出的数字刚好是栈顶数字,那么直接弹出。如果下一个弹出的数字不在栈顶,那么把压栈序列中还没有入栈的数字压入辅助栈,直到把下一个需要弹出的数字压入栈顶为止。如果所有的数字都压入栈了仍然没有找到下一个弹出的数字,那么该序列不可能是一个弹出序列。

代码实现:

public class Solution{
      public static boolean isPopOrder(int[] pushA,int[] popA){
           if(pushA==null||popA==null||pushA.length!=popA.length){
                 return false;
           }
           Stack<Integer> stack=new Stack<Integer>();
           int j=0;
           for(int i=0;i<pushA.length;i++){
                stack.push(pushA[i]);
                while(!stack.empty()&&stack.peek()==popA[j]){
                       stack.pop();
                       j++;
                }
           }
           return stack.empty();
      }

      public static void main(String[] args){
           int[] push={1,1,3,4,5};
           int[] pop={1,1,4,3,5};
           System.out.println(isPopOrder(push,pop));
      }
}

 

 posted on 2018-10-28 14:50  会飞的金鱼  阅读(85)  评论(0)    收藏  举报