周期串~c语言

题目:如果一个字符串可以由某个长度为k的字符串重复多次得到,就说该串以k为周期。如"abcabcabcabc"以3为周期。输入一个长度不超过80的串,输出它的最小周期。

#include<stdio.h>
#include<string.h>
int main()
{
    int i,j,k,flag,T;
    char s[90];
    scanf("%s",s);

    int n=strlen(s);
    for(i=0; i<n/2; i++)
    {
        flag=1;
        T=i+1;                                   //假设周期为T
        k=0;                                      //比较前面序列的第k+1个字符
        for(j=i+1; j<2*T; j++)            //最多比较T次
        {
            if(s[j]!=s[k++])
            {
                flag=0;
                break;
            }
        }
        if(flag)
        {
          /*if(j<n)
            {
               if(s[j]==s[0])
                    break;
               else
                    flag=0;
            }
            else
                break;*/
            if(n%T==0)                                          //避免“ababc”此类情况
                break;
            else
                flag=0;
        }
    }
    
    if(flag)
    {
        printf("最小周期为:%d\n",T);
        for(i=0; i<T; i++)
        {
            printf("%c",s[i]);
        }
        printf("\n");
    }
    else
    {
        printf("最小周期为:%d\n",n);
        for(i=0; i<n; i++)
        {
            printf("%c",s[i]);
        }
        printf("\n");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/mycsdn_xm/article/details/81101034