5. 最长回文子串
题解:用的是dp,还可以用双指针,复杂度都为0(n^2)
class Solution {
public:
string longestPalindrome(string s) {
int lens=s.size();
int max_l=0,max_r=0;
bool dp[lens+10][lens+10];
memset(dp,0,sizeof dp);
for(int len=1;len<=lens;len++){
for(int i=0;i+len-1<lens;i++){
int j=i+len-1;
if(len==1){
dp[i][j]=1;
}else{
if(s[i]==s[j]){
if(j-i==1){
dp[i][j]=1;
}else{
dp[i][j]=dp[i+1][j-1];
}
}else{
dp[i][j]=0;
}
}
if(dp[i][j]&&(j-i>max_r-max_l))
max_l=i,max_r=j;
}
}
return s.substr(max_l,max_r-max_l+1);
}
};