题目链接:【poj 2406】
输入一个字符串,问这个字符串是由几个最小子串拼接起来的,如abcd就是由abcd拼接,输出1,ababab就是由3个ab拼接的,输出3
实际上就是求KMP里面自我匹配的失配数组
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cstring>
using namespace std;
const int inf=1e6+10;
char str[inf];
int len, f[inf];
void find()
{
int j=-1, i=0;
f[0]=-1;
while(i<len)
{
if(j==-1 || str[i]==str[j])
{
i++, j++;
f[i]=j;
}
else j=f[j];
}
}
int main()
{
while(~scanf("%s", str))
{
if(str[0] == '.') break;
memset(f, 0, sizeof(f));
len = strlen(str);
find();
if(len%(len-f[len])==0)
{
printf("%d\n", len/(len-f[len]));
}
else printf("1\n");
}
return 0;
}