1. 程式人生 > >455(Periodic Strings)

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;
}