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];
    }
};
相关推荐
白羊by2 小时前
YOLOv1~v11 全版本核心演进总览
深度学习·算法·yolo
墨尘笔尖3 小时前
最大最小值降采样算法的优化
c++·算法
white-persist6 小时前
【vulhub shiro 漏洞复现】vulhub shiro CVE-2016-4437 Shiro反序列化漏洞复现详细分析解释
运维·服务器·网络·python·算法·安全·web安全
FL16238631296 小时前
基于C#winform部署软前景分割DAViD算法的onnx模型实现前景分割
开发语言·算法·c#
baizhigangqw7 小时前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶
算法·启发式算法·web app
C雨后彩虹7 小时前
最多等和不相交连续子序列
java·数据结构·算法·华为·面试
cpp_25018 小时前
P2347 [NOIP 1996 提高组] 砝码称重
数据结构·c++·算法·题解·洛谷·noip·背包dp
Hugh-Yu-1301238 小时前
二元一次方程组求解器c++代码
开发语言·c++·算法
编程大师哥8 小时前
C++类和对象
开发语言·c++·算法
加农炮手Jinx9 小时前
LeetCode 146. LRU Cache 题解
算法·leetcode·力扣