KMP字符串匹配算法模板

#define maxn 1000000
int Next[maxn];
char s[maxn],t[maxn];
int cnt,ind;	//cnt记录t串在s串中出现的次数,ind记录t串在s串第一次出现的位置下标 
void getNext(int len)
{
	int i=0,k=-1;
	Next[0]=-1;
	while(i<len)
	{
		if(t[i]==t[k]||k==-1)
		Next[++i]=++k;
		else
		k=Next[k];
	}
}
void KMP()
{
	int i=0,j=0;
	int len1=strlen(s),len2=strlen(t);
	getNext(len2);
	for(i=0,j=0;i<len1;)
	{
		if(j==-1||s[i]==t[j])
			i++,j++;
		else
			j=Next[j];
		if(j==len2){
			if(cnt==0)ind=i-len2;	//记录t串第一次出现的下标 
			cnt++;			//t串在s串中的匹配数+1 
			j=0;			//t从头开始继续匹配 
		}
	}
}

以上即为求s串中t串的位置的kmp模板。

    原文作者:KMP算法
    原文地址: https://blog.csdn.net/qq_40907279/article/details/85040293
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞