kmp

头像
许哥
    阅读 1 分钟
    <script>
    l=console.log
    target='abcab'
    str='abcaabcab'
    
    function weight(target){
      let [str,len,weight]=['','',[0]]
      for(i=2;i<=target.length;i++){
        str=target.slice(0,i)
        len=str.length
        for(i=1;i<len;i++){
          if(str.slice(0,len-i)==str.slice(i)){
            weight.push(len-i)
            //break
          }
        }
        weight.length<i ? weight.push(0) : ''
      }
      return weight
    }
    
    function kmp(str,target){
      weight=weight(target)
      k=0
      index=0
      for(i=0,j=0;i<str.length;i++,j++){
        if(target[j]==str[i]){
          k++
        }else{
          move=k-weight[j-1]
          i=index+move-1
          index+=move
          k=0
          j=-1
        }
        if(k==target.length){
          return i
        }      
      }  
    }
    
    l(kmp(str,target))
    
    </script> 

    许哥
    1 声望0 粉丝