刷题87—动态规划(四)
132.最长回文子串
题目链接
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目描述
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
题目分析
- 设置二维数组dp[i][j]为字符串s从索引i到索引j是不是字符串;
- 当s[i]和s[j]相等时,说明可以继续扩张回文字符串;
- 回文字符串的长度一定>=2;
- 所以,状态转移方程:dp[i][j] = s[i] == s[j] && (j-i<2 || dp[i+1][j-1]);
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function(s) {
let n = s.length;
let res ='';
let dp = new Array(n).fill(0).map(() => new Array(n).fill(0));
for(let i=n-1; i>=0; i--){
for(let j=i; j<n; j++){
dp[i][j] = s[i] == s[j] && (j-i<2 || dp[i+1][j-1]);
if(dp[i][j] && j-i+1 > res.length){
res = s.substring(i,j+1);
}
}
}
return res;
};

浙公网安备 33010602011771号