题目链接:https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106?tpId=13&&tqId=11174&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

  思路:关于栈的经典题目,首先我们先按照入栈的顺序一次进行遍历,将其入栈,在入栈的过程中我们排查是否可以出栈,如果可以出栈则出栈,否则将在遍历的过程中重复此过程。遍历完毕时如果栈中元素为空说明可以按照给出的出栈顺序进行出栈,否则说明不能按照给出的出栈顺序进行出栈。

import java.util.*;

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