void getFail()
{
int m = strlen(p);
f[0] = f[1] = 0;
for(int i = 1; i < m; i++)
{
int j = f[i];
while(j && p[i] != p[j])
j = f[j];
f[i+1] = p[i] == p[j] ? j+1 : 0;
}
}
void find()
{
int cnt = 0;
int j = 0;
int n = strlen(a);
int m = strlen(p);
for(int i = 0; i < n; i++)
{
while(j && a[i] != p[j])
j = f[j];
if(a[i] == p[j])
j++;
if(j == m)
{
printf("找到了");
}
}
}
原文:http://blog.csdn.net/u011686226/article/details/23127697