无聊,贴个KMP的代码,备忘。
若想详细了解,点击http://www.matrix67.com/blog/archives/115/
#include <stdio.h>
#define MaxL 1000005
int next[MaxL];
int start,end;
void Get_next(char *P)
{
next[0] = -1;
for(int i=1,j=-1;P[i];i++)
{
if(P[i] == P[j+1])
j++;
else
while(j!=-1 && P[i]!=P[j+1])
j = next[j];
next[i] = j;
}
}
void KMP(char *M,char *P)
{
Get_next(P);
for(int i=0,j=-1;M[i];i++)
{
while(j!=-1 && M[i]!=P[j+1])
j = next[j];
if(j==-1 && M[i]!=P[0])
continue;
if(P[++j + 1] == '\0') //匹配成功
{
start = i-j; //在母串中的起始位置
end = i; //在母串中的结束位置
return ;
}
}
}