题目:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
- 0<=pushV.length == popV.length <=1000
- -1000<=pushV[i]<=1000
- pushV 的所有数字均不相同 思路: 借助一个辅助栈模拟压栈数据,不断比较栈顶和pop序列,如果相同则弹栈否则入栈,如果最后栈弹到为空,则说明该压入顺序和该弹出序列对应;如果为不空,则说明不是与之对应的
function IsPopOrder(pushV, popV)
{
// write code here
var pushIndex=0;
var popIndex=0;
var stackData=[];
while(pushIndex<=pushV.length-1 && popIndex<=popV.length-1){
while(pushV[pushIndex]!==popV[popIndex] &&pushIndex<=pushV.length-1 ){
stackData.push(pushV[pushIndex++]);
}
stackData.push(pushV[pushIndex++]);
while(stackData[stackData.length-1]===popV[popIndex] && popIndex<=popV.length-1){
stackData.pop();
popIndex++;
}
}
if(stackData.length===0&& pushIndex===pushV.length && popIndex===popV.length){
return true;
}else{
return false;
}
}