Description
如果一个字符可以由某个长度为k的字符串重复多次得到,则称该字符串以k为周期。例如,abcabcabc以3为周期(注意,他也以6和12为周期)。
input
1
hohoho
output
2
思路分析:和环装序列的思路一样,找到第一个i满足的条件的就为它的最小周期。附上代码,已经经过UVAoj测试。
#include <iostream>
#include <string>
#include <string.h>
#include <fstream>
using namespace std;
char s[100];
int n, l;
int ismin(int p, int q)
{
for(int i = 0; i < l; i++)
{
if(s[p+i] == s[q+i])
{
if((i+q+1) == l && (l%q == 0))return 1;
else continue;
}
else return 0;
}
return 0;
}
int main()
{
cin >> n;
int ans = 0;
// ofstream savefile("D:\\test.txt");
while(n--)
{
cin >> s;
ans = 0;
l = strlen(s);
for(int i = 1; i < l; i++)
{
if(ismin(ans, i))
{
ans = i;
break;
}
}
if(ans == 0)
{
ans = l;
}
cout << ans << endl;
if(n!=0)cout << endl;
//savefile << ans << endl;
// if(n!=0)savefile << endl;
ans = 0;
memset(s, ' ', sizeof(s));
}
//savefile.close();
}
本文介绍了一种用于确定字符串最小周期的算法,并提供了一个具体的实现案例。通过分析字符串的重复特性,该算法能够快速找到一个字符串的最短周期。代码已通过UVA在线评测系统验证。
913

被折叠的 条评论
为什么被折叠?



