字符串模式匹配,wa了几次,是自己没搞清楚字符串的前缀函数与原来串的位置关系,有待进一步学习
其实这个题还比较简单,写出前缀函数,然后找一下重复子串,出一下就行了,需要注意的是前缀函数中有0,避免做分母。
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char c[1000005];
int next[1000005];
int main()
{
int i,j;
int len;
while(scanf("%s",c)!=EOF)
{
getchar();
if(strcmp(c,".")==0)
break;
next[0]=-1;
next[1]=0;
int k=0;
int len=strlen(c);
for(i=2;i<=len;i++)
{
while(k>=0&&c[k]!=c[i-1])
{
k=next[k];
}
next[i]=++k;
}
j=len-next[len];
if(len%j)
printf("%d\n",1);
else
printf("%d\n",len/j);
}
return 0;
}