刷题87—动态规划(四)

132.最长回文子串

题目链接

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目描述

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:

输入: "cbbd"
输出: "bb"

题目分析

  1. 设置二维数组dp[i][j]为字符串s从索引i到索引j是不是字符串;
  2. 当s[i]和s[j]相等时,说明可以继续扩张回文字符串;
  3. 回文字符串的长度一定>=2;
  4. 所以,状态转移方程: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;
};

  

原文地址:https://www.cnblogs.com/liu-xin1995/p/12791518.html