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]

总结:

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

相关推荐
晨曦夜月几秒前
进程的五大状态及特殊进程解析
linux·服务器·算法
24白菜头4 分钟前
【无标题】
c++·笔记·学习·harmonyos
吟安安安安5 分钟前
适合短期冲刺的学习工作流(针对算法)
学习·算法
科研前沿10 分钟前
什么是时空融合技术?
大数据·人工智能·数码相机·算法·重构·空间计算
AI科技星14 分钟前
全域数学本源公理:0、1、∞ 三者核心关系 (典籍定稿版)
人工智能·算法·数学建模·数据挖掘·量子计算
suirosu18 分钟前
痛风高尿酸血症的治疗方法
笔记·其他·微信·新浪微博
AI科技星19 分钟前
全域数学·第卷:场计算机卷(场空间计算机)【乖乖数学】
java·开发语言·人工智能·算法·机器学习·数学建模·数据挖掘
Deepoch21 分钟前
数学模型驱动:Deepoc 低幻觉数学大模型助力发动机全周期智能优化
人工智能·算法·机器学习·deepoc·数学大模型·低幻觉
嘻嘻哈哈樱桃30 分钟前
牛客经典101题解题集--贪心算法+模拟
java·python·算法·贪心算法
AKDreamer_HeXY31 分钟前
QOJ 12255 - 36 Puzzle 题解
数据结构·c++·数学·算法·icpc·qoj