1068.周期串(详细讲解简单版)

如果一个字符串可以被某个长度为 kk 的字符串重复一次或多次得到,则称这个字符串的周期为 kk。例如,字符串 abcabcabcabc 以 33 为周期(当然,它也以 6,126,12 等等为周期)。

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

输入

输入首先是一个整数 n \ (1 \leq T \leq 1000)n (1≤T≤1000),代表有 nn 组数据。

每组数据占一行,是一个长度不超过 8080 的字符串,保证字符串中只有英文字母。

两组相邻的输入之间有一个空行。

输出

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

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

P.s.: 如果字符串最小正周期串是它本身,则 k=k= 字符串长度。

样例

标准输入复制文本
2

abcabcabc

HoHoHo
标准输出复制文本
3

2

#include<bits/stdc++.h>
using namespace std;
int main()
{	int t;
	cin>>t;
	
	while(t--)
 {
 	
    char word[100];
    int len,flag;
    scanf("%s",word);
    len =  strlen(word);
    for(int i=1;i<=len;i++)    //假设最小周期(最小周期串长度)为i
    {
        if(len%i==0)    //字符串长度一定是周期的倍数
        {
            flag=1;
            
            
            for(int j=i;j<len;j++) 
			{   //从周期i的下一个位置j(因为数组是从0开始的,所以下一个位置的索引j等于周期i)开始
                if(word[j]!=word[j%i])    //和前面假设的周期串中字符逐个比较
                {
                    flag=0;    //如果发现出现一个不相等了,说明这个i不是周期
                    break;    //退出循环比较,递增假设的周期i
                }
			}
			
			
            if(flag)    //循环比较完,仍找不到不相等的就可以确定i是最小周期
            {
                printf("%d\n\n",i);
                break;
            }
        }
    }
    
 }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值