一、kmp算法的核心思想
KMP算法的想法是,设法利用某些已知信息,不要把”搜索位置”移回已经比较过的位置,继续把它向后移,这样就提高了效率。
二、具体实现
具体的算法实现不说了,书上都有,很详细。
下面贴上做了对于长连续串next数组的优化的代码
1 | int kmp(const char *src,const char *dst) |
三、测试
测试一下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16int main()
{
char str[20]="aaaabcdabcda";
char a[10]="abc";
cout<<str<<endl<<a<<endl;
GetNext(a);
cout<<kmp(str,a)<<endl;
char str1[20]="abcdabcda";
char a1[10]="aaaabc";
cout<<str1<<endl<<a1<<endl;
GetNext(a1);
cout<<kmp(str,a1)<<endl;
return 0;
}
结果: