leetCode第五题

70 阅读1分钟

题目:给你一个字符串 s,找到 s 中最长的回文子串;

今天家里来了个新人(小金毛,累~),忙活一天 今天这题就直接出答案了


var longestPalindrome = function(s) {
    let n = s.length;
    let res = '';
    let dp = Array.from(new Array(n),() => new Array(n).fill(false));//初始化数组 
    for(let i = n-1;i >= 0;i--){//循环字符串
        for(let j = i;j < n;j++){
          //dp[i][j]表示子串i~j是否是回文子串
          //回文子串必须满足s[i],s[j]相等。并且向外扩展一个字符也相等,即dp[i+1][j-1]也是回文子串
          //j - i < 2表示子串小于等于1也是回文串
            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;
};