以每个元素为中心点往两边找回文,这一题用dp并不方便。
有奇数长度和偶数长度两种情况
string longestPalindrome(string s) {
string ans;
int max_len = 0;
int n = s.length(), j = 0;
for(int i = 0; i < n; i++){
// odd length
j = 0;
while(1){
if(i-j-1 >= 0 && i + j +1 < n && s[i-j-1] == s[i+j+1])
j++;
else
break;
}
if(2*j+1 > max_len){
max_len = 2*j +1;
ans = s.substr(i-j, max_len);
}
// even length
if(i+1 < n && s[i] == s[i+1]){
j = 0;
while(1){
if(i -j-1 >= 0 && i + j + 1 < n && s[i-j-1] == s[i+j+2])
j++;
else
break;
}
if(2*j+2 > max_len){
max_len = 2*j +2;
ans = s.substr(i-j, max_len);
}
}
}
return ans;
}