您的位置:首页 > 其它

poj2752 kmp 进一步运用

2013-01-28 19:22 253 查看
/*
题意:给定字符串,判断哪些下标开始即是它的前缀又是它的后缀
同时,由kMP中next[]的性质可得,模式串的前半部分的字符和后半部分的字符
相同。
*/
#include<stdio.h>
#include<string.h>
#define max 400010
int next[max];
char str[max];
void get_next(char tem[])
{
int j=0,k=-1;
int len=strlen(tem);
next[0]=-1;
while(j<len)
{
if(k==-1||tem[j]==tem[k])
next[++j]=++k;
else
k=next[k];
}
}
void output(int n)
{
if(next
>=0)
output(next
);
if(n>0)
printf("%d ",n);
}
int main()
{
while(scanf("%s",str)!=EOF)
{
int t=strlen(str);
get_next(str);
output(next[t]);
printf("%d\n",t);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: