枚举长度判断是否符合周期串,用next判断
#include<cstring>
#include<cstdio>
using namespace std;
#define MAXN 1000005
int next[MAXN];
char s[MAXN],p[MAXN];
void getnext(int n)
{
for(int i=1;i<n;i++)
{
int j=next[i];
while(j&&p[i]!=p[j])
{
j=next[j];
}
if(p[i]==p[j])
{
next[i+1]=j+1;
}
else
{
next[i+1]=0;
}
}
}
int main()
{
int cas=1,n;
while(scanf("%d",&n)&&n)
{
scanf("%s",p);
getnext(n);
printf("Test case #%d\n",cas++);
for(int i=2;i<=n;i++)
{
if(next[i]&&i%(i-next[i])==0)
printf("%d %d\n",i,i/(i-next[i]));
}
putchar(10);
}
return 0;
}
本文介绍了一种通过枚举和next数组来判断字符串是否为周期串的方法,并提供了完整的C++实现代码。利用next数组进行周期性判断,可以有效地找出字符串的所有可能周期。
352

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



