LeetCode-最长回文子串

LeetCode刷题笔记

LeetCode题库:https://leetcode-cn.com/problemset/all/

最长回文子串

给定字符串s,找出其最长回文子串

思路

利用动态规划的思想,从短的子串开始判断是否为回文子串,直到判断完所有子串,记录判断结果。

长子串是由多个短子串组成,所以判断的过程中可以直接使用短子串的判断结果,减少判断次数。

代码实现

var longestPalindrome = function(s) {
    var dp = [];
    // 初始化数组
    for (let i in s) {
        dp[i] = [];
    }

    var result = '';

    for (let i = 0; i < s.length; i++) {
        for (let j = 0; j <= i; j++) {
            if (i - j < 3 && s[i] === s[j]) {
                // 子串长度不大于3时,首尾两个字符相等即是回文子串(a、aa、aba)
                dp[j][i] = true;
            } else if (s[i] === s[j] && dp[j + 1][i - 1]) {
                // 长度大于3,首尾字符相等且去掉首尾字符后也是符合条件的才是回文子串(abba、abcba)
                dp[j][i] = true;
            } else {
                dp[j][i] = false;
            }

            if (dp[j][i]) {
                // 获取当前最长回文子串
                var str = s.slice(j, parseInt(i) + 1);
                result = result.length >= str.length ? result : str;
            }
        }
    }

    return result;
};

执行结果

执行用时 内存消耗
1900 ms 65.7 MB
posted @ 2021-05-31 16:41  陈嘉懿  阅读(72)  评论(0编辑  收藏  举报