代码随想录算法训练营第四十五天| 115.不同的子序列 、583. 两个字符串的删除操作 、 72. 编辑距离

38 阅读1分钟

115.不同的子序列

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

解题思路

代码实现

var numDistinct = function(s, t) {

    var dp = new Array(s.length+1).fill().map(()=>new Array(t.length+1).fill(0));
    for(let i=0;i<=s.length;i++){
        dp[i][0] = 1;
    }

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

583. 两个字符串的删除操作

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

解题思路

代码实现

var minDistance = function(word1, word2) {
    var dp = new Array(word1.length+1).fill().map(()=>new Array(word2.length+1));
    for(let i=0;i<=word1.length;i++){
        dp[i][0]=i;
    }
    for(let j=0;j<=word2.length;j++){
        dp[0][j] = j;
    }

    for(let i=1;i<=word1.length;i++){
        for(let j=1;j<=word2.length;j++){
            if(word1[i-1] ===word2[j-1]){
                dp[i][j] =  dp[i-1][j-1];
            }else{
                dp[i][j] = Math.min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+2);
            }
        } 
    }
    return dp[word1.length][word2.length];
};

72. 编辑距离

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

解题思路

代码实现

var minDistance = function(word1, word2) {
    var dp = new Array(word1.length+1).fill().map(()=>new Array(word2.length+1).fill(0));
    for(let i=0;i<=word1.length;i++){
        dp[i][0] =i;
    }

    for(let j=0;j<=word2.length;j++){
        dp[0][j] =j;
    }

    for(let i=1;i<=word1.length;i++){
        for(let j=1;j<=word2.length;j++){
            if(word1[i-1] ===word2[j-1]){
                dp[i][j] = dp[i-1][j-1];
            }else{
                dp[i][j] = Math.min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+1);
            }
        }
    }
    return dp[word1.length][word2.length];
};