KMP模版

时间:2022-11-18 22:29:38
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int next[];
void getNext(char *str)
{
 int j,k;
 memset(next,0,sizeof(next));
 j=0;
 k=-1;
 next[0]=-1;
 while(str[j])
 {
  if(k==-1 || str[j]==str[k])
   next[++j]=++k;
  else
   k=next[k];
 }
}
int KMP(char *s,char *t)
{
getNext(t);
int i,j,k;
i=j=;
int num=;
while(s[i]!='\0')
{
if(s[i]==t[j])
{
i++,j++;
}
else
{
if(next[j]!=-)
j=next[j];
else
i++,j=;
}
if(t[j]=='\0')
{
num++;
//i-=j;
//i++;进行重复匹配
j=;
}
}
return num;
}
int main()
{
char str1[]="ababababababa";
char str2[]="aba";
printf("%d\n",KMP(str1,str2));
return ;
}