这个题写的时候扣爆了脑袋
但是豁然开朗了
这是目前想到的几种解法
第一种:非常简陋的中心拓展法,很丑陋
class Solution {
public:
int rig=0, lef=0, maxd = 1;
void solve(string s,int n){
int l=n,r=n,i=1;
int len=s.size();
for(;r<len;++r)
if(s[r]!=s[l])break;
r--;
int si=min(l,(int)s.size()-r-1);
for(i=1;i<=si;++i)
if(s[l-i]!=s[r+i])break;
--i;
l-=i;
r+=i;
if(r-l>=maxd){
maxd=r-l;
rig=r;
lef=l;
}
}
string longestPalindrome(string s) {
int len=s.size();
for(int i=0;i<len-1;++i){
solve(s,i);
}
// return "s";
string a;
for(int i=lef;i<=rig;++i)
a+=s[i];
return a;
}
};
第二种:刚学会的dp写法(顺便了解到了substr)
class Solution {
public:
string longestPalindrome(string s) {
string ans=s.substr(0,1);
vector<vector<bool>>arr(s.size(),vector<bool>(s.size()));
for(int i=s.size()-1;i>=0;--i)
for(int j=i+1;j<s.size();++j){
if(j-i<=2)
arr[i][j]=s[i]==s[j];
else
arr[i][j]=(s[i]==s[j])&&arr[i+1][j-1];
if(arr[i][j]&&j-i+1>ans.size())
ans=s.substr(i,j-i+1);
}
return ans;
}
};