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模板。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章