题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。
思路:把数据先按顺序一边存入辅助栈中,一边和弹出序列匹配,如果有匹配就从辅助栈中弹出。最终如果辅助栈为空,那就是匹配。
解决方案:
public class Question31 {
public boolean isPopOrder(int[] push, int[] pop){
if (push.length == 0 || pop.length == 0) return false;
Stack<Integer> tmp = new Stack<Integer>();
int popIndex = 0;
for (int i=0; i<push.length; i++){
tmp.push(push[i]);
while (!tmp.isEmpty() && tmp.peek() == pop[popIndex]){
tmp.pop();
popIndex++;
}
}
return tmp.isEmpty();
}
}
网友评论