UVa455 Periodic Strings(周期串)
Description
如果一个字符串可以被某个长度为k的字符串重复多次得到,则称这个字符串的周期为k。例如,字符串“abcabcabcabc”以3为周期(当然,他也以6、12等等为周期)。
现在请你编写一个程序,求出任一长度不超过80的字符串的最小周期。Input输入首先是一个整数n,代表有n组数据。
每组数据占一行,是一个长度不超过80的字符串。
两组相邻的输入之间有一个空行。Output每组数据在一行内输出一个整数k,代表该字符串的最小周期。
两组相邻的输出之间应当有一个空行。
现在请你编写一个程序,求出任一长度不超过80的字符串的最小周期。Input输入首先是一个整数n,代表有n组数据。
每组数据占一行,是一个长度不超过80的字符串。
两组相邻的输入之间有一个空行。Output每组数据在一行内输出一个整数k,代表该字符串的最小周期。
两组相邻的输出之间应当有一个空行。
Sample Input
2 abcabcabc HoHoHoSample Output
3 2
解答:
#include<iostream> #include<cstring> #include<cstdio> using namespace std; char s[100],a; int l,n; int solve() { bool b=1; memset(s,0,sizeof(s)); scanf("%s",&s); l=0; while(s[l]!=0) l++; for(int i=1;i<=l;i++)//长度 { if(l%i==0) { b=1; for(int j=0;j<l;j+=i) { int k; for(k=0;k<i;k++) { if(s[j+k]!=s[k]) { b=0; break; } } if(b==0) break; } if(b==1) return i; } } return 0; } int main() { scanf("%d",&n); while(n--) { int ans; ans=solve(); if(n!=0) printf("%d\n\n",ans); else printf("%d\n",ans); } }