参考:mooc浙大数据结构
数据结构_浙江大学_中国大学MOOC(慕课)
kmp算法的本质是:
1、当指针 i 指向的 字符s[i] 和指针 j 指向的 字符p[j] 不相同时,指针 i 不回退,指针 j 回退。(对比暴力算法是,指针 i 回退到之前位置的下一个位置,指针 j 直接回退到0)
2、然后根据p的相同前后缀处理出来一个数组,记录着每次不匹配时,j 指针应该回退的位置。
记录指针回退位置的数组称为match数组,match[i]表示的是:
字符串p中,下标从0到i这段区间内,找到最长的且相同的前后缀,该前缀最后一个字符的下标。如果0-i区间内没有子串,那么记录match[i]=-1
构建match数组时的思想类似动态规划,在求match[i]时,假设match[i]之前的元素都已经被求出。那么
1、如果p[j] == p[match[j - 1] + 1] 那么 match[j] = match[j - 1] +