Periodic Strings

Time limit 3000 ms
OS Linux

Description

如果一个字符串可以被某个长度为k的字符串重复多次得到,则称这个字符串的周期为k。例如,字符串“abcabcabcabc”以3为周期(当然,他也以6、12等等为周期)。

现在请你编写一个程序,求出任一长度不超过80的字符串的最小周期。

Input

输入首先是一个整数n,代表有n组数据。

每组数据占一行,是一个长度不超过80的字符串。

两组相邻的输入之间有一个空行。
加粗样式

Output

每组数据在一行内输出一个整数k,代表该字符串的最小周期。

两组相邻的输出之间应当有一个空行。

Sample Input

2

abcabcabc

HoHoHo

Sample Output

3

2


个人觉得吧 这题挺水的 只要掌握string.h里的几个函数就能很好的模拟这个过程


#include <stdio.h>
#include <string.h>
int main()
{
	int n;
	scanf("%d",&n);
 	while(n--)
 	 {
 		 char data[1000];
		 scanf("%s",data);
 		 int len = strlen(data);
 		 char dete[1000] = {0};
 		 char temp[1000] = {0};
 		 for(int i = 0 ; i < len ; i++)
 		 {
 			 dete[i] = data[i];     //挨个读取字符串
  			 if(len % (i + 1) == 0)  //如果一个子串是这字符串的周期串,则母串长度一定是子串长度的整数倍
   			{
  				 strcpy(temp , dete); 
   				 for(int j = 1 ; j < len / (i + 1) ; j++)
  				  {
   					  strcat(temp , dete);// 将前面的字符串补成一样长度的字符串
  				  }
    
				if(strcmp(temp , data) == 0)
   				{
     					printf("%d\n",i + 1);//下标加1就是周期
    					break;
				}
    				memset(temp , 0 , sizeof(temp));//这句应该可以不用
  			 }
 		 }
 		if(n != 0)
 		{
			printf("\n");//特别注意这题的格式   相邻两组的输入是有换行的 我在这被wa了36发 hhhhhh
 		}
	 }
	 return 0;
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值