(动态规划) LeetCode5. 最长回文子串

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

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

示例 2:
输入: "cbbd"
输出: "bb"

方法一:动态规划

var longestPalindrome = function(s) {
    let res = '';
    let n = s.length;
    let dp = Array.from(new Array(n),() => 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;
};

方法二:中心扩展算法

var longestPalindrome = function(s) {
    let res = '', start = 0, end = 0;
    let len = s.length;
    var getMax = function(i, j) {
        while(i >= 0 && j < len && s[i] === s[j]){
            i --;
            j ++;
        }
        return j - i - 1;
    }
    for(let i = 0;i < len; i++){
        let a = getMax(i, i);
        let b = getMax(i, i + 1);
        let max = Math.max(a, b);

        if(max > end - start){
            start = i - ((max - 1) >> 1);
            end = i + ((max) >> 1);
        }
    }
    return s.substring(start,end+1);
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容