kmp算法
kmp算法
//计算偏移值
void get_next(const char pat[], int next[])
{
memset(next,0,sizeof(next));
int i=-1,j=0;next[0]=-1;
while(j < strlen(pat))
{
if(i==-1||pat[i]==pat[j])
{
i++;
j++;
next[j]=i;
}
else
{
i=next[i];
}
}
}
// kmp算法
int kmp(const char *str, const char*pat, int *next)
{
int i=0,j=0,len1=strlen(str),len2=strlen(pat);
while((i<len1)&&(j<len2))
{
if(j==-1||str[i]==pat[j])
{
j++;
i++;
}
else
{
j=next[j];
}
}
if(j==len2)
return i-len2;
else
return -1;
}
本博客内容均来自网络,如有雷同,是我抄袭!
浙公网安备 33010602011771号