代码随想录算法训练营第四十六天| 647. 回文子串 、 516.最长回文子序列

34 阅读1分钟

647. 回文子串

相关链接:题目链接文章讲解 视频讲解

解题思路

代码实现

var countSubstrings = function(s) {
    var dp = new Array(s.length).fill().map(()=>new Array(s.length).fill(false));
    var result =0;

    for (let i=s.length-1;i>=0;i--){
        for(let j=i;j<s.length;j++){
            if(s[i] ===s[j]){
                if(j-i<=1){
                    dp[i][j] = true;
                    result++;
                }else if(dp[i + 1][j - 1]){
                     dp[i][j] = true;
                     result++;
                }
            }
        }
    }
    return result;
};

516.最长回文子序列

相关链接:题目链接文章讲解 视频讲解

解题思路

代码实现

var longestPalindromeSubseq = function(s) {
    var  dp = new Array(s.length).fill().map(()=>new Array(s.length).fill(0));

    for(let i=0;i<s.length;i++){
        dp[i][i] = 1;
    }

    for(let i=s.length-1;i>=0;i--){
        for(let j=i+1;j<s.length;j++){
            if(s[i] ===s[j]){
               dp[i][j] = dp[i+1][j-1] +2;
            }else{
                dp[i][j] =Math.max(dp[i+1][j],dp[i][j-1]);
            }
        }
    }
    return dp[0][s.length-1]
};