UVa 455 周期串

来源:互联网 发布:网络教育专科学费多少 编辑:程序博客网 时间:2024/05/16 09:25

455 - Periodic Strings

Time limit: 3.000 seconds

 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

1HoHoHo

Sample Output

2

1、周期一定可以被长度整除

2、字符串最大长度为80,可以从1开始枚举,枚举到1/2长度即可

#include <stdio.h>#include <string.h>char input[85];int is_circle( int c,const char *s,int len);int main(int argc, const char * argv[]) {    int T;    scanf("%d",&T);    int first = 1;    while (T --) {        memset(input, 0, sizeof(input));        scanf("%s",input);        int len = strlen(input);        int circle = len;        for (int i = 1; i <= (len+1)/2; ++ i) {            if (len % i == 0 && is_circle(i,input,len)){                circle = i;                break;            }        }        //输出        if (first)            first = 0;        else            printf("\n");        printf("%d\n",circle);    }    return 0;}int is_circle(int c,const char *s, int len){    for(int i = 0;i < len - c; ++i){        if(s[i]!=s[i+c])            return 0;    }    return 1;}


0 0