看了知乎的高赞解答,总结一下 如何更好地理解和掌握 KMP 算法?
- 判断字符串与模式字符串是否匹配,为了避免重复判断,需要借助部分匹配表(PMT),部分匹配表是通过计算模式字符串前缀和后缀字符串相同的最大长度获得,其作用是,例如我们判断到字符串s[i]!=p[j],则s[i]前PMT[j-1]位一定与与模式字符串的第0到PMT[j-1]相等。
- 利用部分匹配表是计算的模式字符串当前长度的最大前缀和后缀,就能找到s字符串继续匹配的开始点,在代码中实际只需要变换j的值,从而继续匹配,实际j控制的是模式字符串的开始位置。