题意
求给定串的最小循环节个数题解
最小循环节长度=len-border
border:最长公共前后缀
kmp代码
#include <iostream>
#include <cstdio>
#include <cstring>
#define MAXN 1000001
using namespace std;
int nxt[MAXN];
char s[MAXN];
int main(){
while(~scanf("%s",s+1)){
if(s[1]=='.') break;
int fix=0;
int i;
for(i=2;s[i];i++){
while(fix&&s[fix+1]!=s[i]) fix=nxt[fix];
if(s[fix+1]==s[i]) fix++;
nxt[i]=fix;
}
i--;
if((i-nxt[i])&&i%(i-nxt[i])==0)
printf("%d\n",i/(i-nxt[i]));
else
printf("1\n");
}
return 0;
}