剑指offer

题目描述

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列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;
}