void getnext()
{
memset(nex,0,sizeof(nex));
nex[0]=-1;
int j=-1,k=0;
int len=strlen(t);
while(k<len)
{
if(j==-1||s[j]==s[k])
{
j++;k++;
nex[k]=j;
}
else
j=nex[j];
}
}
void kmp()
{
int i,j;
i=j=0;
int ans=0;
int len=strlen(t),len1=strlen(s);
while(i<len)
{
if(j==-1||s[j]==t[i])
{
i++;j++;
}
else
j=nex[j];
if(j==len1)
{
ans++;
//j=nex[j];可重叠匹配
j=0;//不可重叠匹配
}
}
}
kmp模板
最新推荐文章于 2018-06-13 10:30:00 发布