Chri_K

kmp

总体来说,你、n%(n-next[n])==0代表有循环节,n-next[n]代表循环节长度,n/(n-next[n])代表循环节个数
#include <cstdio>
#include <cstring>
using namespace std;
int next[1000];
char a[1000];
void getnxt()
{
int len =strlen(a+1);
int j=0;
for(int i=2;i<=len;i++)
{
while(a[j+1] != a[i]&& j)
{
j=next[j];
}
if(a[j+1] == a[i]){
j++;
}
next[i]=j;
}
}
int main()
{
scanf("%s",a+1);
getnxt();
int len =strlen(a+1);
int ans = (len - next[len]);
printf("%d",ans);
}

posted on 2020-09-12 14:00  Chri_K  阅读(35)  评论(0)    收藏  举报