求一个字符串在第几位上出现了循环节,输出位数 以及循环节的大小
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main()
{
char s[1000100];
int t;
int Case = 1;
while(~scanf("%d", &t)){
if(t == 0) break;
scanf("%s", s);
int next[t+1];
int i = 0,j = -1;
next[0] = -1;
while(i < t){
if(j == -1||s[i]==s[j]){
i++;
j++;
next[i] = j;
}else{
j=next[j];
}
}
printf("Test case #%d\n", Case);
for(i = 2;i<=t;i++){
if(i%(i-next[i])==0&&i/(i-next[i])>1){
printf("%d %d\n", i, i/(i-next[i]));
}
}
cout <<endl;
Case++;
}
return 0;
}