以上为原题
#include <bits/stdc++.h>
using namespace std;
int check1(string s, int l ,int r);
string check2(string s);
int main()
{
string s;
cin>>s;
cout<<check2(s)<<endl;
return 0;
}
string check2(string s)
{
int start=0,end=0;
if(s.length()<1)
{
return "";
}else{
int i;
for(i=0;i<s.length();i++)
{
int len1=check1(s,i,i);
int len2=check1(s,i,i+1);
int len=max(len1,len2);
if(len>end-start)
{
//cout<<len<<endl;长度查看
start=i-(len-1)/2;
end=i+len/2;
}
}
}
return s.substr(start,end-start+1);
}
int check1(string s, int l ,int r)
{
while(l>=0&&r<s.length()&&s[l]==s[r])
{
r++;
l--;
}
return r-l-1;
}
以上解题完整代码
引用了string类型 以及相关函数
自行编写了两个函数
check1
int check1(string s, int l ,int r)
{
while(l>=0&&r<s.length()&&s[l]==s[r])
{
// 计算以l和r为中心的回文串长度
r++;
l--;
}
return r-l-1;//返回的为该回文字符串的全长度
}
该函数 是用来筛选出 最长的回文字符串并记录到len中
下面是函数check2
string check2(string s)
{
int start=0,end=0;
if(s.length()<1)
{
return "";
}else{
int i;
for(i=0;i<s.length();i++)
{
int len1=check1(s,i,i);//中心为一个元素 例如‘aba’
int len2=check1(s,i,i+1);//中心为两个元素 例如‘abba’
int len=max(len1,len2);//选出最长的字符串
if(len>end-start)
{
//cout<<len<<endl;
start=i-(len-1)/2; //记住起始位置
end=i+len/2;//记住结束位置
}
}
}
return s.substr(start,end-start+1);//最终返回该最长字符串
}