题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
http://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
题解
题目
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列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();
}
}