5. Longest Palindromic Substring
Leetcode
題目
解答
var longestPalindrome = function(s) {
const dp = Array.from(Array(s.length), (_) => Array(s.length));
// 紀錄開始位置
let left = 0;
// 紀錄最長迴文長度
let maxLength = 1;
for(let i=0; i<s.length; i++) {
// 自己與自己比一定是迴文
dp[i][i] = true;
// 對小於 i 的部分遞迴
// ex. i = 3;
// 計算 j 從 0 -> 3 範圍的所有 dp 是否為迴文
// 可以求出 dp[0][3], dp[1][3], dp[2][3]
for(let j=0; j<i; j++) {
if(i-j<=1) {
// 相鄰元素,只要兩者相等為迴文
dp[j][i] = s[j] === s[i];
} else {
// 不相鄰元素,確保兩者相同及 dp 向內減 1 為迴文,即為迴文
dp[j][i] = s[j] === s[i] && dp[j+1][i-1];
}
if(dp[j][i] && i-j+1 > maxLength) {
left = j;
maxLength = i-j+1;
}
}
}
return s.substring(left, left+maxLength);
};參考資料
Last updated