思路:这个题如果就去枚举每个子串判断其是否是对称的 复杂度太高看了网上大牛的题解,确实很巧妙的思维想法
对于一个字符串我们从中间向两端去扩展并判断是否对称
分为两种情况:
1.如果对称子串是奇数,就以该字符为轴向两边扩展 找到一个对称的就+2最后更新最大值
2.如果对称子串是偶数,那么就以两个字符为轴向两边扩展,找到对称+2 并更新最大值
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
typedef long long ll;
char s[1111];
int main()
{
gets(s);
int len=strlen(s);
int max=1,ans=0;
int x,y;
for(int i=0;i<len-1;i++)
{
ans=0;
x=i;
y=i+1;
while(s[x]==s[y]&&x>=0&&y<len)
{
x--;
y++;
ans+=2;
}
if(ans>max)
max=ans;
}
for(int i=1;i<len-1;i++)
{
ans=1;
x=i-1;
y=i+1;
while(s[x]==s[y]&&x>=0&&y<len)
{
x--;
y++;
ans+=2;
}
if(ans>max)
max=ans;
}
cout<<max<<endl;
return 0;
}