版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/richenyunqi/article/details/82155020
UVA - 455. Periodic Strings题解
欢迎访问我的Uva题解目录https://blog.csdn.net/richenyunqi/article/details/81149109
题目描述
题意解析
求一个给定字符串的最小周期
算法设计
字符串周期 i 只可能是[1,字符串长度]之间能被字符串长度整除的数。从小到大枚举符合要求的数 i ,看看对于每个周期内的字符与第一个周期内的字符是否相同,第一个符合全部要求的 i 即为所求。
注意点
本题输出要求非常刁钻,要求每个输出的数字占一行,并且两个输出的数字之间有一个空行。注意最后一个输出的数后也需要一个换行符。
C++代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int N;
scanf("%d",&N);
string s;
while(N--){
cin>>s;
int i=1;//周期
for(;i<=s.size();++i){//枚举从1到s.size()之间所有的数作为周期
if(s.size()%i==0){//周期必然可以被s.size()整除
for(int k=i;k<s.size();++k)//枚举第一个周期以外的所有字符
if(s[k]!=s[k%i])//如果和第一个周期内的对应字符不同
goto loop;//进行跳转
break;//找到了一个符合要求的周期,跳出循环
loop:;//验证下一个周期
}
}
printf("%d\n%s",i,N>0?"\n":"");//输出
}
return 0;
}