题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出序列。假设压入栈的所有数字均不相等。例如序列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
浙公网安备 33010602011771号