KMP算法构造next数组是最重要的
void ini_next(int len)
{
int i = 0 , j = -1;
next[0] = -1;
while( i <= len )
{
if( j == -1 || str[i] == str[j])
{
i++;
j++;
next[i] = j;
}
else
{
j = next[j];
}
}
}
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include "stdio.h"
#include "string.h"
int next[1000000];
char str[1000000];
void ini_next(int len)
{
int i = 0 , j = -1;
next[0] = -1;
while( i <= len )
{
if( j == -1 || str[i] == str[j])
{
i++;
j++;
next[i] = j;
}
else
{
j = next[j];
}
}
}
int main()
{
int len;
while(scanf("%s",str))
{
if(strcmp(str,".") == 0)
break;
memset(next,0,sizeof(next));
len = strlen(str);
ini_next(len);
if( 2*next[len] < len )
printf("1\n");
else
{
if(len%(len-next[len]) == 0)
printf("%d\n",len/(len-next[len]));
else
printf("1\n");
}
}
return 0;
}