//求字符串的最小周期
//我的思路,找与s[0]相同的字符,然后判定从s[0]到此字符之前的长度能不能作为一个周期
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s[110];
int n;
scanf("%d",&n);
getchar();
while(n--){
getchar();
scanf("%s",s);
if(strlen(s)==1){
printf("%d\n",1);
if(n)
putchar('\n');
continue;
}
int i,j;
for(i=1;s[i]!='\0';i++){
if(s[i]==s[0]&&strlen(s)%i==0){//此处判断此时的周期长度能被总长度整除
for(j=i;s[j]!='\0';j++)//!!!重点!!!此处判断当前采取的周期合适
if(s[j]!=s[j%i])
break;
if(s[j]=='\0'){
printf("%d\n",i);
if(n)
putchar('\n');
break;
}
}
}
if(s[i]=='\0'){
printf("%d\n",strlen(s));
if(n)
putchar('\n');
}
}
return 0;
}
/*
他人方法:暴力搜索
解题思路:在长度范围之内,一个个枚举周期即可,注意周期应能被总长度整除
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define max 100+10
char s[max];
int main()
{
int n, len;
scanf("%d", &n);
getchar();
while (n--)
{
getchar();
gets(s);
len = strlen(s);
for (int i = 1; i <= len;i++)
if (len%i == 0)
{
bool ok = true;
for (int j = i; j < len;j++)
if (s[j] != s[j%i])
{
ok = false;
break;
}
if (ok)
{
printf("%d\n", i);
if (n)
putchar('\n');
break;
}
}
}
return 0;
}
*/
UVa 455 Periodic Strings(周期串)
最新推荐文章于 2022-10-02 16:34:11 发布