给你一个字符串 s
,找到 s
中最长的 回文 子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
实现代码:
javascript
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function(s){
const n = s.length;
if (n < 2) return s;
const dp = new Array(n).fill(false).map(() => new Array(n).fill(false));
let maxLen = 1;
let begin = 0;
for (let i = 0; i < n; i++) {
dp[i][i] = true;
}
for (let L = 2; L <= n; L++) {
for (let i = 0; i < n; i++) {
const j = i + L - 1;
if (j >= n) break;
if (s[i] !== s[j]) {
dp[i][j] = false;
} else {
if (j - i < 3) {
dp[i][j] = true;
} else {
dp[i][j] = dp[i + 1][j - 1];
}
}
if (dp[i][j] && L > maxLen) {
maxLen = L;
begin = i;
}
}
}
return s.substring(begin, begin + maxLen);
};