UVA - 455(Periodic Strings)

题目翻译:求一个字符串的最小周期。

思路:这个题我的思路就是“偏移法”,如果字符串是个循环体,那么一定有一段是反复存在的,例如abAB(大小写无区别,这里方便理解),当偏移量为1时对应不相等(a对应b,b对应A,A对应B),当偏移量为2时(a对应A,b对应B)对应相等,那么它的最小周期就是2. 但是如果例子为abcAB,程序出来的结果为3而不是5,这里需要将输入的abcAB加倍为abcABabcAB,再次运行才得以AC.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char a[200],b[200];
    int i,k,n,q,len,j;
    scanf("%d",&n);
    for(q=0; q<n; q++)
    {
        scanf("%s",a);
        strcpy(b,a);
        len=strlen(a);
        strcat(a,b);
        int T=len,is;
        len=len*2;
        for(i=1; i<len; i++)
        {
            is=1;
            for(j=0,k=i;k<len&&j<len;k++,j++)
            {
                if(a[j]!=a[k])
                {
                    is=0;
                    break;
                }
            }
            if(is==1)
            {
                T=i;
                break;
            }
        }
        printf("%d\n",T);
        if(q<n-1)
            printf("\n");

    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Vici__/article/details/79250261