day-56 代码随想录算法训练营(19)动态规划 part 16

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

思路一:
  • 1.dp存储:以word1[i-1]结尾,word2[j-1]结尾,最少进行dp[i][j]次操作
  • 2.动态转移方程: if(word1[i-1]==word2[i-1]) dp[i][j]=dp[i-1][j-1];
  • else dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1)
  • 3.初始化:dp[i][0]=i dp[0][j]=j
  • 4.遍历顺序:1~尾巴
cpp 复制代码
class Solution {
public:
    int minDistance(string word1, string word2) {
        int n=word1.size(),m=word2.size();
        vector<vector<int>>dp(n+1,vector<int>(m+1,0));
        for(int i=0;i<=n;i++) dp[i][0]=i;//相同时需要删除所有字符串
        for(int j=0;j<=m;j++) dp[0][j]=j;

        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(word1[i-1]==word2[j-1]) dp[i][j]=dp[i-1][j-1];//不需要操作
                else dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1);//两个字符串各自的操作取最小
            }
        }
        return dp[n][m];
    }
};

72.编辑距离

思路:
  • 1.dp存储:以word1[i]结尾,word2[j]结尾,使两个字符串相同的最小操作次数
  • 2.动态转移方程: if(word1[i-1]==word2[j-1]) dp[i][j]=dp[i-1][j-1];
  • else dp[i][j]=min(dp[i-1][j-1]+1,min(dp[i-1][j]+1,dp[i][j-1]+1)
  • 3.初始化:dp[i][0]=i dp[0][j]=j
  • 4.遍历顺序:1~n 1~m
cpp 复制代码
class Solution {
public:
    int minDistance(string word1, string word2) {
        int n=word1.size(),m=word2.size();
        vector<vector<int>>dp(n+1,vector<int>(m+1,0));
        for(int i=0;i<=n;i++) dp[i][0]=i;
        for(int j=0;j<=m;j++) dp[0][j]=j;

        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){//添加和删除都是一样的,两边各添加和删除;改变就是上一次的值+1
                if(word1[i-1]==word2[j-1]) dp[i][j]=dp[i-1][j-1];
                else dp[i][j]=min(dp[i-1][j-1]+1,min(dp[i-1][j]+1,dp[i][j-1]+1));
            }
        }
        return dp[n][m];
    }
};
相关推荐
PassLink_1 小时前
AlgorithmVisualizer项目改进与部署-网页算法可视化
算法·编程·开源项目·本地部署·算法可视化·源码改进
GalaxyPokemon2 小时前
LeetCode - 2. 两数相加
java·前端·javascript·算法·leetcode·职场和发展
编程绿豆侠2 小时前
力扣HOT100之堆:347. 前 K 个高频元素
算法·leetcode·哈希算法
GalaxyPokemon4 小时前
归并排序:分治思想的高效排序
数据结构·算法·排序算法
ThreeYear_s4 小时前
基于FPGA的PID算法学习———实现PI比例控制算法
学习·算法·fpga开发
Coding小公仔7 小时前
LeetCode 240 搜索二维矩阵 II
算法·leetcode·矩阵
C++chaofan7 小时前
74. 搜索二维矩阵
java·算法·leetcode·矩阵
Studying 开龙wu8 小时前
机器学习监督学习实战五:六种算法对声呐回波信号进行分类
学习·算法·机器学习
Mi Manchi268 小时前
力扣热题100之二叉树的层序遍历
python·算法·leetcode
wu~9708 小时前
leetcode:42. 接雨水(秒变简单题)
算法·leetcode·职场和发展