题目链接:D - Periodic Strings
题意:找出组成字符串的最短子字符串
思路:用一个变量表示子字符串长度 然后不断循环判断相隔相应的长度的字符串是否相等 直到能循环到最后 便找到了最短子字符串 数据水 没超时 感觉这么循环 数据大点的话应该就超时了 不超时耗的时间也要很久 很久前A的题了 差点没看出当初啥思路...重写的话算法应该能更效率些……
代码如下:
#include
#include
int main()
{
char st[81];
int n,i,j,r,num,len;
scanf("%d",&n);
while(n--)
{
r=-1;
j=0;
i=1;
scanf("%s",st);
len=strlen(st);
for(;;)
{
if(len==1) break;
for(j=0;j<=len-i-1&&i<=len/2+1;j++)
{
if(len%i==0){
if(st[j]!=st[j+i]){
i++;
r=-1;
break;
}
if(j==len-i-1)
num=i;
r=0;
}else {
i++;
break;
}
}
if(r==0) break;
else if(i==len/2+1){
break;
}
}
if(r==0)
printf("%d",num);
else printf("%d",len);
if(n!=0)
printf("\n");
printf("\n");
}
return 0;
}