题目描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
function IsPopOrder(pushV, popV)
{
let pusha=pushV.split('');
let popa=popV.split('');
let len=pusha.length;
let flag=false; //flag 表明最后结果
let help=[];
let index=pusha.indexOf(popa[0]);
help=help.concat(pusha.slice(0,index+1)); //初始化辅助栈
pusha=pusha.slice(index+1);
while(len){
if(popa[0]==help[help.length-1]){
popa.shift();
help.pop(); //若相等则不断移除相等的项
}
else{
let id=pusha.indexOf(popa[0]);
if(id<0){
flag=false;
break; //若没有在初始栈中发现元素则说明顺序不对
}
help=help.concat(pusha.slice(0,index+1));
pusha=pusha.slice(index+1);
help.pop();
popa.shift();
}
len--;
}
if(popa.length==0&&help.length==0){
flag=true;
}
return flag;
}