leetcode做题笔记72

给你两个单词 word1word2请返回将 word1 转换成 word2 所使用的最少操作数

你可以对一个单词进行如下三种操作:

  • 插入一个字符
  • 删除一个字符
  • 替换一个字符

思路一:动态规划

cpp 复制代码
int minDistance(char * word1, char * word2){
    //动态规划
        int dp[501][501];
        int i,j;
        int size1=strlen(word1);
        int size2=strlen(word2);
        dp[0][0]=0;
        for(i=0;i<=size2;i++){
            dp[0][i]=i;
        }
        for(i=0;i<=size1;i++){
            dp[i][0]=i;
        }
        for(i=1;i<=size1;i++){
            for(j=1;j<=size2;j++){
                dp[i][j]=fmin(dp[i-1][j],fmin(dp[i][j-1],dp[i-1][j-1]))+1;
                if(word1[i-1]==word2[j-1]){
                    dp[i][j]=fmin(dp[i][j],dp[i-1][j-1]);
                }
            }
        }
        return dp[size1][size2];
}

时间复杂度O(n^2),空间复杂度O(n)

分析:

本题将一个字符串变为另一个字符串,首先长度需变为一致,即删除一个或者插入一个,再将两个字符串中字符变为相同,删除和插入的操作可转化为 dp[i][j]=fmin(dp[i-1][j],fmin(dp[i][j-1],dp[i-1][j-1]))+1;,替换的操作转化为dp[i][j]=fmin(dp[i][j],dp[i-1][j-1]);最后输出dp[size1][size2]

总结:

本题考察动态规划问题,将删除,插入,替换的操作转换为动态规划内比较两个格子值大小即可解决

相关推荐
地平线开发者18 分钟前
征程 6 | PTQ 精度调优辅助代码,总有你用得上的
算法·自动驾驶
Tisfy43 分钟前
LeetCode 837.新 21 点:动态规划+滑动窗口
数学·算法·leetcode·动态规划·dp·滑动窗口·概率
CoovallyAIHub1 小时前
为高空安全上双保险!无人机AI护航,YOLOv5秒判安全带,守护施工生命线
深度学习·算法·计算机视觉
huangzixuan10071 小时前
08.18总结
算法·深度优先·图论
逆向菜鸟2 小时前
【摧毁比特币】椭圆曲线象限细分求k-陈墨仙
python·算法
DolphinDB2 小时前
DolphinDB 回测插件快速上手
算法
利刃大大2 小时前
【动态规划:路径问题】最小路径和 && 地下城游戏
算法·动态规划·cpp·路径问题
武大打工仔2 小时前
用 Java 复现哲学家就餐问题
算法
要做朋鱼燕2 小时前
【数据结构】用堆解决TOPK问题
数据结构·算法
yiqiqukanhaiba3 小时前
STM32学习笔记13-通信协议I2C&MPU6050&I2C软件控制
笔记·stm32·学习