<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>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。