之前比赛的时候,一道KMP的题目没有做出来,很是郁闷。最近一两天仔细研究了一下KMP,收获不少。

基本的KMP思想算法什么的就不再赘述了。只是我在网上找资料的时候发现KMP的失配数组(next[])有两个版本,但是几乎没有资料将这两个版本的next[]做一个较好的分析。于是,写了这篇blog,对这两类next[]做了一个简单的分析,希望对大家有帮助,也希望大家能指出其中的错误和不足。由于直接贴文本格式难以控制,于是一部分内容被做成了图片。分析如下:

第一类next数组求解函数:

 

Code


第二类next数组求解函数:

 

Code



POJ 3461 Oulipo这道题用两类KMP都可以过,但是代码上有一些细微的差别。本人比较喜欢第一类KMP,于是就贴第一类的代码了。
POJ 3461 Oulipo