基础知识
这道题要能摸清出栈入栈操作究竟是怎么运行的,就比较容易理解了
首先科普一下题例里的出栈顺序是怎么实现的:
入栈顺序:1 2 3 4 5;
出栈顺序:4 5 3 2 1;
过程:
1 2 3 4 入栈
4 出栈
5 入栈
5 出栈
3 2 1依次出栈
出栈顺序:4 3 5 1 2:
过程:
1 2 3 4 入栈
4 3 依次出栈
5 入栈
5 出栈
这个时候栈内顺序为 1 2
1 不可能在 2 之前出栈
所以这个例子是错误的
分析代码
我们新建一个栈,模仿根据入栈出栈顺序的栈,如果能模拟成功,则序列正确,反之,序列错误;
先压入栈顺序内第一个数,看它在弹出数组是第几个被弹出的,如果它始终没有被弹出,循环结束,return false
如果它有可以对上的出栈顺序,则正式弹出,看入栈顺序下一个数在弹出数组是第几个被弹出的,循环这个过程。
function IsPopOrder(pushV, popV)
{
// write code here
var stack=[];
for(var i=0,j=0;i<pushV.length;i++){
stack.push(pushV[i]);
while(j<popV.length&&stack[stack.length-1]==popV[j]){
j++;
stack.pop();
}
}
if(stack.length==0){
return true;
}
else{
return false;
}
}