Problem C: 周期串plus
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 212 Solved: 101
[Submit][Status][Web Board]Description
如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如abcabcabcabc以3为周期(当然他也以6,12为周期)。输入一个长度不超过100000的串,输出他的最小周期。
Input
多组测试数据,每组仅一行为一个仅有大写字母组成的字符串。
Output
对于每组数据输出该字符串的最小周期。
Sample Input
HOHO
Sample Output
2
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <vector>
#include <stack>
#include <set>
#include <algorithm>
using namespace std;
const int maxn = 1e5 + 5;
char str[maxn];
int main()
{
while(scanf("%s",str) != EOF)
{
int len = strlen(str);
int flag = 0;
int i;//!!!!!!!i要放在外面
for(i = 1;i <= len ;i++)//i代表最小周期
{
if(len % i == 0)
{
flag = 0;
for(int j = i ;j < len;j ++)//每个周期内相同位置的字符应该相同
{
if(str[j] != str[j % i])
{
flag = 1;
break;
}
}
if(!flag)break;
}
}
cout<<i<<endl;
}
return 0;
}