串的模式匹配:在一篇“文章”中寻找一个“单词”
传统的模式匹配就是从开头开始,逐一的匹配,失败了就下一个单词,直到满足条件,这样效率比较低。
KMP模式匹配:
例如比较子串T:a b c d e x 与
主串S:a b c d e f g a b
从头开始比较,前五个字母相同,第六个不同,本应该接着从S的第二个元素b开始比。但如果发现T中的a与后面的字符都不一样, 若T与S的前五个相同,这意味着T的首字符a不可能与S的第二到五位字符相同,所以可以连跳4步,接着从S的f开始匹配。
这就是kmp算法的思想。
先对子串处理,求出nextval[](这是由next[]优化而来的),这个数组表现子串中前后字符的相似度,便于匹配时省略不必要的比较。