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]

总结:

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

相关推荐
电院工程师3 分钟前
SM3算法Python实现(无第三方库)
开发语言·python·算法·安全·密码学
小刘同学++40 分钟前
用 OpenSSL 库实现 3DES(三重DES)加密
c++·算法·ssl
万变不离其宗_81 小时前
echarts使用笔记
前端·笔记·echarts
写写闲篇儿2 小时前
搜索二维矩阵
线性代数·算法·矩阵
蒙奇D索大2 小时前
【11408学习记录】考研数学核心突破:矩阵本质、系统信息与向量空间基
笔记·学习·线性代数·考研·矩阵·改行学it
LunaGeeking2 小时前
重要的城市(图论 最短路)
c++·算法·编程·图论·最短路·floyd
刘小小_算法工程师2 小时前
「ECG信号处理——(17)基于小波熵阈值的R峰检测(与时域-频域-多尺度小波法对比)」2025年6月12日
算法·信号处理
电控极客2 小时前
电动汽车驱动模式扭矩控制设计方法
经验分享·算法·汽车·策略模式
jz_ddk2 小时前
[python] 使用python设计滤波器
开发语言·python·学习·算法
1白天的黑夜13 小时前
二叉树-226.翻转链表-力扣(LeetCode)
数据结构·c++·leetcode