void getnext(char *target ,int *next)
{
int len = strlen(target);
next[0] = 0;
for(int i=1,k=0;i<len;++i)
{
while(k>0 && target[i]!=target[k])
k = next[k-1];
if(target[i]==target[k])
k++;
next[i] = k;
}
}
bool compact(char *str ,char *target,int *next)
{
int slen = strlen(str);
int tlen = strlen(target);
getnext(target ,next);
for(int i=0 ,k=0;i<slen;++i)
{
while(k>0 && target[k]!= str[i])
k = next[k-1];
if(target[k]==str[i])
k++;
if(k==tlen)
return true;
}
return false;
}
kmp
最新推荐文章于 2022-12-13 23:34:45 发布