刷题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; };