题意:给定一个字符串 a,求最小循环节的长度。
分析:显而易见是个KMP题 (。・∀・)ノ
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int N = 1e6+10;
int nxt[N];
char a[N];
int n;
void GetNext()
{
nxt[0]=-1;
int j=0,k=-1;
while(j<n)
{
if(k==-1||a[j]==a[k])
{
++j,++k;
nxt[j]=k;
}
else
{
k=nxt[k];
}
}
}
int main()
{
while(~scanf("%s",a))
{
n=strlen(a);
GetNext();
printf("%d\n",n-nxt[n]);
}
return 0;
}