题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805067704549376
参考链接:https://blog.csdn.net/king_cannon_fodder/article/details/75893967
最重要的是要考虑对称子串既有可能是奇数长度的,又有可能是偶数长度的!!!
AC代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int len; //字符串的长度
int maxLen; //回文串的最大长度
string s; //输入的字符串
while(getline(cin,s))
{
maxLen=0; //初始化最长对称子串长度为0
len=s.length();
for(int i=0;i<len;i++) //遍历每个位置以作为对称子串的中心点
{
for(int j=0;j<=i&&i+j<len;j++) //奇数长度的对称子串
{
if(s[i-j]!=s[i+j]) break; //如果不对称,结束
if(2*j+1>maxLen) maxLen=2*j+1; //更新长度,因为是奇数,所以左右两边扩展的长度是j,加上中心点一个,就是2*j+1
}
for(int j=0;j<=i&&i+j+1<len;j++) //偶数长度的对称子串
{
if(s[i-j]!=s[i+j+1]) break; //如果不对称,结束
if(2*(j+1)>maxLen) maxLen=2*(j+1); //更新长度,因为是偶数,所以左右两边扩展的长度都是j+1
}
}
cout<<maxLen<<endl;
}
return 0;
}