5. 最长回文子串
解法一:暴力
class Solution {
public:
string longestPalindrome(string s) {
int maxLen = 0;
int n = s.length();
int start = 0, end = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; i-j >= 0 && i+j < n && s[i+j] == s[i-j]; j++) { //回文长度为奇
if (2*j+1 > maxLen) { // len = (i+j)-(i-j)+1 = 2*j+1
start = i-j;
end = i+j;
maxLen = 2*j+1;
}
}
for (int j = 0; i-1-j >= 0 && i+j < n && s[i-1-j] == s[i+j]; j++) { //回文长度为偶
if(2*j+2 > maxLen) { // len = (i+j)-(i-1-j)+1 = 2*j+2
start = i-1-j;
end = i+j;
maxLen = 2*j+2;
}
}
}
return s.substr(start, end-start+1);
}
};解法二:DP

最后更新于