UVA 455

在这里插入图片描述

题目大意:

输入一个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;
}
原文地址:https://www.cnblogs.com/Hayasaka/p/14294234.html