UVA - 455 Periodic Strings

本文介绍了一种通过求字符串长度的因数来寻找其最小重复字段的方法,并提供了一个C++实现示例。该方法首先计算字符串长度的所有因数,然后遍历这些因数以检查它们是否构成有效的重复字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大意:统计一个字符串的最小重复字段的字符数,如
“ abcabcabc ”的最小重复字段为“abc”,则对应字符数为 3 。

重点内容解题思路:由小到大求输入字符的长度的因数,每个因数为一个可能的重复字段。遍历每个字段的对应字符,出现不同则继续求下一个因数;全相同则退出循环,此时的因数即最小重复字段的字符数。

#include<iostream>
#include<string.h>
using namespace std;
int main() {
    int n , comm , i , j , k , l , cho = 0;
    char a[85];
    cin >> n;
    while(n--) {
        cin >> a;
        i=0;
       stp:
        if(i< strlen(a)) {
            i++;
            if( strlen(a) % (i) == 0 ) {
                comm = i;
                for(j = 0; j < comm ; j++) {
                        l = 1;
                   for( k = comm + j; k < strlen(a); k=l*comm + j ) {
                       if(a[j] == a[k]) cho = 1;
                       else { cho = 0 ; goto stp; }
                       l++;
                   }
                }
            }
            else goto stp;
            cout << comm <<endl;
        }

        if(n) { cout << endl;}
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值