KMP算法是带有跳跃性的字符串匹配算法。具体请参考百度百科。
next[ind]表示模式串Pattern的Pattern[0...ind]子串注释1的最长公共前后缀的长度。其中,next[0] = 0。
值得注意的是:在计算next数组的时候,可以根据前一个字符的next值,计算后一个字符的next值。
也就是说,当Pattern[ind] 等于 Pattern[j]的时候,next[ind] = j + 1。
否则:
当Pattern[ind] 等于 Pattern[k]的时候,next[ind] = k + 1,否则判断Pattern[ind] 是否等于 Pattern[next[k-1]],。。。,以此类推,一直到某个字符的next值为0。
假设主串的MainString[i-j...i-1] 和 模式串的Pattern[0...j-1]匹配,而MainString[i] 和 Pattern[j]失配,此时,就需要回溯。
在KMP算法中,回溯到的位置不是 i - j + 1,而是:
这就是本文开头所说的跳跃性。