UVa 455 Periodic Strings(週期串)
阿新 • • 發佈:2019-02-16
//求字串的最小週期 //我的思路,找與s[0]相同的字元,然後判定從s[0]到此字元之前的長度能不能作為一個週期 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char s[110]; int n; scanf("%d",&n); getchar(); while(n--){ getchar(); scanf("%s",s); if(strlen(s)==1){ printf("%d\n",1); if(n) putchar('\n'); continue; } int i,j; for(i=1;s[i]!='\0';i++){ if(s[i]==s[0]&&strlen(s)%i==0){//此處判斷此時的週期長度能被總長度整除 for(j=i;s[j]!='\0';j++)//!!!重點!!!此處判斷當前採取的週期合適 if(s[j]!=s[j%i]) break; if(s[j]=='\0'){ printf("%d\n",i); if(n) putchar('\n'); break; } } } if(s[i]=='\0'){ printf("%d\n",strlen(s)); if(n) putchar('\n'); } } return 0; } /* 他人方法:暴力搜尋 解題思路:在長度範圍之內,一個個列舉週期即可,注意週期應能被總長度整除 #include<stdio.h> #include<string.h> #include<ctype.h> #define max 100+10 char s[max]; int main() { int n, len; scanf("%d", &n); getchar(); while (n--) { getchar(); gets(s); len = strlen(s); for (int i = 1; i <= len;i++) if (len%i == 0) { bool ok = true; for (int j = i; j < len;j++) if (s[j] != s[j%i]) { ok = false; break; } if (ok) { printf("%d\n", i); if (n) putchar('\n'); break; } } } return 0; } */