kmp总结

公共前后缀有多长,回溯就回溯多少

next数组是保存公共前后缀长度的数组

数组前一个元素,两个元素....n个元素分别的公共前后缀是多少都保存在next数组

kmp总结_第1张图片

 其中k不变,q一直变,直到q=k找到第一个公共前后缀,接下来让q,k一起往后走一个,如果再相等,公共前后缀就+1,如果不相等,k=next[k-1],即上一个回溯的位置,q比k走的快,这个回溯是k与q不相等,就看k前一个元素在next中的数据

kmp总结_第2张图片

 

我的疑惑,为什么要看k的位置的前一个

我的思考 因为只有出现相同前后缀k才会++,现在出现不一样的了,所以k倒退一个

为什么回退以后不用再比一次k和q的值一不一样

我的思考 因为这是公共前后缀,一样也没用,回退的k和q-1已经配对了,不可以再和q配对

你可能感兴趣的:(数据结构)