题目大意:
输入一个n表示有n组数据,对于每组数据输入一个字符串,输出这个字符串的最小周期,比如qazqazqaz qaz是循环的,因此他的最小周期是3。
解题思路:
长度最多80,直接暴力枚举即可,枚举 1-(s.length()/2),如果1-(s.length()/2)都不行,则直接输出字符串长。对于每一次枚举,先截取从0-i 长度的字符串,然后从0去一个一个比较,相等则继续往下走,如果走到了length(),则说明这个枚举是可以的,退出循环输出长度。这个题会卡输出格式,注意换行。AC代码:(有大佬是用环形串的思想去解的,非常巧妙可以去参考一下)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <sstream>
#include <map>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
string s;
int ans;
cin>>s;
bool flag=false;
for(int i=1;i<=s.length()/2;i++)
{
string t=s.substr(0,i);
int j;
for(j=0;j<s.length();j++)
{
if(t!=s.substr(j,i))
break;
j+=i;
j--;
}
if(j==s.length())
{
flag=true;
ans=i;
}
if(flag)//flag用来判断前面枚举的长度是否可行
break;
}
cout<<(flag?ans:s.length())<<endl;
if(n)//
cout<<endl;
}
return 0;
}