关于KMP是一个比较难理解的算法。其作用是求解字符串a中有没有b。如果用常规方法时间复杂度是(Onm),而用KMP时间复杂度为(On+m)。算法是对模拟串进行处理,用数组NEXT记录位置i前的最长前缀和后缀。详见代码如下:
#include<cstdio>
#include<cstring>
int NEXT[1000];
int main()
{
char a[100],b[100];
scanf("%s%s",a,b);
int i,j;
int n = strlen(a);
int m = strlen(b);
j = -1;i=0;NEXT[0] = -1;
while(i<m){
if(j == -1 || b[i] == b[j]){
i++;j++;
NEXT[i] = j;
}
else j = NEXT[j];
}
i = j = 0;
while(i<n){
if(j == -1 || a[i] == b[j]){
i++;j++;
if(j == m) break;
}
else j = NEXT[j];
}
printf("%d\n",i-m+1);
}
本文介绍了一种用于字符串匹配的高效算法——KMP算法,并详细解释了其原理与实现过程。相较于传统的字符串匹配方法,KMP算法能显著提高查找效率,通过预处理模式串构建next数组来避免重复匹配。
10万+

被折叠的 条评论
为什么被折叠?



