//poj 2406 求字符串的最小循环节,输出重复次数
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<string.h>
#define maxn 5000000
using namespace std;
int next[maxn];
char s[maxn];
//研究getnext函数的原理。暂时理解不出来。
void getnext()
{
int len=strlen(s);
int i=0;int j=-1;
next[0]=-1;
while(i<len)
{
if(s[i]==s[j] || j==-1)
{
i++;
j++;
next[i]=j;
}
else
{
j=next[j];
}
}
}
int main()
{
while(scanf("%s",s)!=EOF)
{
if(s[0]=='.')
break;
getnext();
int len=strlen(s);
if(len%(len-next[len])==0)
printf("%d\n",len/(len-next[len]));
else
printf("%d\n",1);
}
}
POJ 2406 KMP
最新推荐文章于 2021-10-04 20:37:54 发布
本文介绍了一种求解字符串最小循环节的方法,并通过KMP算法的getnext函数实现。主要内容包括getnext函数的原理说明及其在求解过程中的应用。
638

被折叠的 条评论
为什么被折叠?



