我得承认,我对KMP的理解没有达到百分百,所以在阐述解释时都不能将KMP算法的妙处讲清楚。
一、实现思想
- 通过对子串每一个字符进行扫描,会得出一个数组,这个数组可以用来帮助主串和子串比较时跳跃式前进(避免了一些不必要的比较)
- 还是看图理解一下吧。(真的讲不清楚)
二、图例实现
BF表现出来的缺点
KMP算法
三、代码实现
了解自身结构的函数,有了这个我们就可以知道在比较发生不匹配时可以跳过哪些,或者说是否要从头开始。这个函数我是看着课本的数学关系写出来的,所以我也解释不清。
1 //得到next数组 这个函数就是用来了解自身结构的,但是妙处我描述不清楚,忏愧。 2 int *find_next(char t[]) 3 { 4 int len = strlen(t); 5 6 int *next = new int[len]; //建立在堆区的next数组 7 8 for (int i = 0; t[i] != '