题目的意思很简单,但是调了我好久,有很多细节都没有发现,导致很多的错误输出。
题目实际上就是让我们用暴力的方法枚举最小循环节,因为字符串的长度比较小,故使用暴力就足以,如果长度比较大的话,那就得考虑KMP来解决了。
# include<cstdio> # include<iostream> # include<cstring> using namespace std; # define MAX 100 char s[MAX]; int main(void) { int t;cin>>t; while (t--) { scanf("%s",s); int n = strlen(s); int k; for ( int i = 1;i <= n;i++ ) { if ( n%i == 0 ) { for ( k = i;k < n;k++ ) { if ( s[k]!=s[k%i] ) break; } if ( k == n ) { printf("%d\n",i); break; } } } if (t) cout<<endl; } return 0; }