有两种情况,第一种是中心是有数字,即最长回文的长度为奇数,一种是中心不是数字,即最长回文的长度为偶数。使用两个循环即可。
class Solution {
public:
string longestPalindrome(string s) {
const int n = s.size();
if(n==0){
return "";
}
int max_i = 0;
int max_j = 0;
int max_length = -1;
for(int i=0;i<n;i++){
int j = 0;
while(i-j>=0 && i+j<n){
if(s[i-j]==s[i+j]){
if(max_length<2*j+1){
max_length = 2*j+1 ;
max_i = i-j;
max_j = i+j;
}
}else{
break;
}
j++;
}
}
for(int i=1;i<n;i++){
int j = 0;
while(i-1-j>=0 && i+j<n){
if(s[i-1-j]==s[i+j]){
if(max_length<2*j+2){
max_length = 2*j+2 ;
max_i = i-1-j;
max_j = i+j;
}
}else{
break;
}
j++;
}
}
return string(s.begin()+max_i,s.begin()+max_j+1);
}
};
https://leetcode-cn.com/problems/longest-palindromic-substring/submissions/