function main(){
console.log(kmpMatch(data.string,data.substring))
}
function kmpMatch(string,substring){
let next=getNext(substring)
let i=0,j=0
while(i<string.length && j<substring.length){
if(j===-1 || string.charAt(i)===substring.charAt(j)){
j++
i++
}else{
j = next[j] - 1
}
}
if(j>=substring.length){
return i-substring.length
}
return -1
}
main()
function getNext(string){
let i=1,len=string.length;
let maxMatchLength=0;
let mpt=[0]
while(i<string.length){
if(string.charAt(i)===string.charAt(maxMatchLength)){
maxMatchLength++
mpt.push(maxMatchLength)
i++
}else{
if(maxMatchLength===0){
mpt.push(0)
i++
}else{
maxMatchLength=mpt[maxMatchLength-1]
}
}
}
let next = new Array(string.length)
next[0] = 0
for(let k=1; k<string.length; k++){
next[k] = mpt[k-1] + 1
}
return next
}