Periodic Strings

来源:互联网 发布:淘宝营销活动是什么 编辑:程序博客网 时间:2024/05/17 09:10

Description
Download as PDF
Periodic Strings
A character string is said to have period k if it can be formed by concatenating one or more repetitions of another string of length k. For example, the string “abcabcabcabc” has period 3, since it is formed by 4 repetitions of the string “abc”. It also has periods 6 (two repetitions of “abcabc”) and 12 (one repetition of “abcabcabcabc”).
Write a program to read a character string and determine its smallest period.
Input
The first line oif the input file will contain a single integer N indicating how many test case that your program will test followed by a blank line. Each test case will contain a single character string of up to 80 non-blank characters. Two consecutive input will separated by a blank line.
Output
An integer denoting the smallest period of the input string for each input. Two consecutive output are separated by a blank line.
Sample Input
1

HoHoHo
Sample Output
2
一个字符串,问最少是多少个字符重复的。只用搜n/2次就好了,如果都不行,就是原来的长度。
写的时候要注意比较,容易出错。

#include<cstdio>#include<cstring>#include<iostream>#include<string>#include<queue>#include<algorithm>using namespace std;char a[105], b[105];int check(int x,int step){    int i, j, leap = 0;    for (i = 1; i < step; i++)    {        for (j = i*x ; j < i*x + x; j++)        {            if (a[j] != a[j%x])leap = 1;        }    }    if (leap)return 0;    else return 1;}int main(){    int i, j, m, n, ans, t, len,step;    cin >> t;    getchar(); getchar();    while (t--)    {        gets(a);        len = strlen(a);        for (i = 1; i <= len / 2; i++)        {            if (len%i != 0)continue;            step = len / i;            for (j = 0; j < i; j++)                b[j] = a[j];            if (check(i, step))break;        }        if (i == len / 2 + 1)cout << len << endl;        else cout << i << endl;        if (t != 0)cout << endl;        if (t)getchar();    }    return 0;}
0 0
原创粉丝点击