455(Periodic Strings)
阿新 • • 發佈:2019-02-20
題目翻譯:求一個字串的最小週期。
思路:這個題我的思路就是“偏移法”,如果字串是個迴圈體,那麼一定有一段是反覆存在的,例如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; }