您的位置:首页 > 其它

poj2752 kmp 模板题

2016-04-01 17:55 357 查看
1.当一个s[j]与p[i]失配时,跳转至s[next[j]],说明了s[0] ~s[next[j]]与s[j - next[j]] ~ s[j]这两段字符是相同的,想一想就懂了;

2.递归输出;

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
int f[401000], len;
char s1[401000];
void getfail()
{
f[0] = f[1] = 0;

for(int i = 1; i < len; i++)
{
int j = f[i];
while(j && s1[j] != s1[i])
{
j = f[j];
}
f[i + 1] = s1[i] == s1[j] ? j + 1 : 0;
}
}
void digui(int len)
{
if(len == 0)
{
return;
}
digui(f[len]);
printf("%d ", len);
}
int main()
{
while(scanf("%s", s1) != EOF)
{
len = strlen(s1);
getfail();
digui(len);
printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: