leetcode 5. 最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串。

 

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"
输出:"bb"

 

提示:

  • 1 <= s.length <= 1000
  • s 仅由数字和英文字母组成

原题链接

/**
 * @param {string} s
 * @return {string}
 */
// 动态规划实现
var longestPalindrome = function(s) {
    let l = s.length;
    if(l<=1){
        return s
    }
    let ans = "";
    let dp = new Array(l).fill(0).map(()=>new Array(l));
//
dp[i][j] 表示 s[i..j] 是否是回文串
  for(let i=1;i<l;i++){
        for(let j=0;j<=i;j++){
            // 满足以下条件,即相比较的两个字符相等且他们是同一个字符或相邻的字符或他们那各自往回缩一个字符还是回文
            if(s.charAt(i)===s.charAt(j)&&(i-j<2||dp[j+1][i-1])){
                dp[j][i]=true;
                let res =  s.substring(j,i+1); // 取含末尾的字符串
                ans=res.length>ans.length?res:ans;
            }
        }
    }
    return ans;
};

解法参考回文子串实现方案。

posted @ 2022-11-13 16:56  蓓蕾心晴  阅读(14)  评论(0编辑  收藏  举报