如何判断是否是循环语句思考了很久,最后还是参考了别人的思路
#include <cstdio>
#include <cstring>
#include <iostream>
#define max 1000000
using namespace std;
int next[max];
char str1[max];
int get_next(char *pat)
{
int j=0,k=-1;
int len=strlen(pat);
next[0]=-1;
while(j<len)
{
if(k==-1||pat[j]==pat[k])
next[++j]=++k;
else
k=next[k];
}
cout<<next[j]<<endl;
j=len-next[j];//如果是循环字符串,j一定是一个循环的长度
if(len%j==0)//能整除,证明确实是循环字符串
return len/j;
else
return 1;
}
int main()
{
while(scanf("%s",&str1)!=EOF)
{
if(str1[0]=='.')
break;
printf("%d\n", get_next(str1));
}
return 0;
}