UVA-455 Periodic Strings

来源:互联网 发布:下沙淘宝代运营骗局 编辑:程序博客网 时间:2024/05/16 08:28

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

#include<iostream>#include<stdio.h>#include<string.h>#include<string>using namespace std;int main(){    int N,l=1;scanf("%d",&N);    while(N--){        if(!l) cout<<endl;        if(l){            l=0;        }        int flag=0;        char s[100];        cin>>s;        int num=strlen(s);        if(num==1) {//一定一定不要漏掉只有一个字母的时候啊,或者让flag初始值为1            cout<<"1"<<endl;continue;        }        int i=1,k,f=0;        while(!f&&i<num){//f:如果扫到最后一个字符退出循环            if(s[i]!=s[0]){                i++;flag=i;continue;            }            else{                    flag=i;                    int m=0;                    for( k=i;k<strlen(s);k++){                        if(s[k]!=s[m]){                            flag=k;i=flag;break;                        }                        if(m<flag-1)                            m++;                        else m=0;                    }                    if(k==strlen(s)){                        if(m)//串最后一个字母没有到重复段的最后字母,比如hohoh                            flag=num;                        f=1;                        break;                    }//if             }//else        }//while        cout<<flag<<endl;    }    return 0;}
原创粉丝点击