因为本题只有100,暴力是可以过的,思想就是枚举它的所有>2的回文子串,然后将他们按长度大小进排序 ok上代码

using namespace std;
const int N=300;
string s1[N];
bool cmp(string a,string b)
{
	return a.size()<b.size();
}
bool check(string s)
{
	string s3="";
	for(int i=s.size()-1;i>=0;i--)
	{
		s3+=s[i];
	}
	if(s3==s) return true;
	else return false;
}
int main()
{
    string s;
    int x=0;
    cin>>s;
    for(int i=0;i<s.size()-1;i++)
    {
    	string s2="";
    	s2+=s[i];
    	for(int j=i+1;j<s.size();j++)
    	{
    		s2+=s[j];
    		if(check(s2))
    		{
    		   s1[x]=s2;
    		   x++;
    	    }
    	    else
    	    {
    	    	continue;
			}
		}
	}
	sort(s1,s1+x,cmp);
	if(s1[0].size()==0) cout<<"-1"<<endl;
	else
	{
		cout<<s1[0].size()<<endl;
	} 
	return 0;
}

是不是太过暴力了,但本题也是有规律的,那规律是什么呢。 举个例子:abcba是长度为5的回文串,但它还包含了bcb这个长度为3的回文子串 在来一个:abba是长度为4的回文串,但它包含了bb这个长度为2的回文子串 所以不管这个字符串提取了多少长度的回文子串,它最小的长度要么是3或2. 现在就很明白了,此题只能输出-1 2 3 上代码

```#include<bits/stdc++.h>
using namespace std;
// aa aba 如果是4个abba 这样中间就有bb了 5个呢 abcba 3个
//所以 只有3种情况 -1,2,3 
int main()
{
	string s;
	cin>>s;
	for(int i=0;i<s.size()-1;i++)
	{
		if(s[i]==s[i+1])
		{
			cout<<"2\n";
			return 0;
		}
	}
	for(int i=0;i<s.size()-2;i++)
	{
		if(s[i]==s[i+2])
		{
			cout<<"3\n";
			return 0;
		}
	}
	cout<<"-1\n";
	return 0;
}
真的简洁不少