题目描述
给两个数组,第一个表示进栈顺序,第二个表示出栈顺序,问是否合法
解法
在每一次进栈的时候,都进行判断是否有出栈操作。维护一个队列,代表进栈的数,而判断成立的条件是,队列尾部的元素和出栈数组对应。那么删除队列尾部元素。最后判断队列是否为空。
public boolean IsPopOrder(int [] pushA,int [] popA) {
List<Integer> list = new ArrayList<>();
for (int i = 0, j = 0; i < pushA.length; i++) {
list.add(pushA[i]);
int len = list.size();
while (len>0 && list.get(len - 1) == popA[j]) {
list.remove(len - 1);
j++;
len = list.size();
}
}
return list.isEmpty();
}