题解

题目

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

示例

输入:[1,2,3,4,5],[4,3,5,1,2]
输出:false

思路

利用其他工具来实现,这里是判断压入、弹出栈的序列是否符合,那么就使用栈来解决。先是根据入栈队列将元素压入栈中,每压入一个元素,就判断一下出栈序列当前元素是不是和栈头元素一致并且栈不为空,若满足这两个条件,将栈中的头元素弹出,stack.pop()。直到最后,判断这个栈是否为空,若为空说明这个弹出序列是正确的,不为空说明是错误的,返回false。

代码

import java.util.*;

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