剑指offer刷题之java实现的栈的压入、弹出序列

来源:互联网 发布:知乎匿名提问 编辑:程序博客网 时间:2024/06/05 17:02
package mine;import java.util.LinkedList;import java.util.Stack;/** *  * @author毛二 * @data   2015-8-9 * @comments栈的压入、弹出序列 * 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。 * 假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序, * 序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。 */public class StackSeq {    public static boolean IsPopOrder(int [] pushA,int [] popA) {    boolean flag = false;    int j=0;    if(((pushA==null )||(popA==null)) ||pushA.length != popA.length || (pushA.length==0 || popA.length==0) )    return flag;      Stack<Integer> s = new Stack<Integer>();       for(int i: popA){      System.out.println("i = "+i);      System.out.println("before pop "+s.size());       if(!s.isEmpty()&& i == s.peek()){      s.pop();      System.out.println("after pop "+s.size());        }      else {      for(;j<pushA.length;j++){      if(i == pushA[j]){//      System.out.print("last push: "+pushA[j]+"\n");//!      s.push(pushA[j]);      j++;      System.out.println();      break;      }else {      System.out.print("push: "+pushA[j]);      s.push(pushA[j]);      }      }      }      }      if(s.isEmpty())      flag= true;      System.out.println(flag+" "+s.size());      return flag;    }    public static void main(String[] args) {int[] push = null;//{1,2,3,4,5};int[] pop = null;//{4,5,3,2,1};//{1,2,3,1,5};//{4,3,5,1,2};System.out.println(IsPopOrder(push,pop));}}

0 0