首页 > 其他分享 >经典的编辑距离

经典的编辑距离

时间:2023-01-09 20:35:30浏览次数:52  
标签:int 经典 距离 编辑 word1 word2 dp

image

导读 ^ _ ^

编辑距离是线性DP中比较困难的题目。
关键在于如何看待删,增,换。

题目

leetcode 72
image.png

代码与思路

确定状态

  • dp[i][j] 表示以下标i-1为结尾的字符串word1,和以下标j-1为结尾的字符串word2,最近编辑距离为dp[i][j]。
if (word1[i - 1] == word2[j - 1])
    不操作:dp[i][j] = dp[i - 1][j - 1];
if (word1[i - 1] != word2[j - 1])
    增:增一个元素和删除一个元素一样
    
    删:删前 dp[i][j] = dp[i - 1][j] + 1; 删后dp[i][j] = dp[i][j - 1] + 1;

    换:前面的匹配好的再加当前一个替换数 dp[i][j] = dp[i - 1][j - 1] + 1;
    综上:取最小 dp[i][j] = min({dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]}) + 1;
变成空字符的操作数
for (int i = 0; i <= word1.size(); i++) dp[i][0] = i;
for (int j = 0; j <= word2.size(); j++) dp[0][j] = j;

遍历答案

  • 从左上推导到右下

image.png

//编辑距离


class Solution {
public:
    int minDistance(string word1, string word2) {
        vector<vector<int>> dp(word1.size() + 1, vector<int>(word2.size() + 1, 0));
        for (int i = 0; i <= word1.size(); i++) dp[i][0] = i;
        for (int j = 0; j <= word2.size(); j++) dp[0][j] = j;
        for (int i = 1; i <= word1.size(); i++) {
            for (int j = 1; j <= word2.size(); 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 - 1][j], dp[i][j - 1]}) + 1;
                }
            }
        }
        return dp[word1.size()][word2.size()];
    }
};

#谢谢你的观看!

^ _ ^

标签:int,经典,距离,编辑,word1,word2,dp
From: https://www.cnblogs.com/HX-Note/p/17038443.html

相关文章

  • Python经典开源项目
    Python-100-Days项目地址:https://github.com/jackfrued/Python-100-DaysPython-100-Days就是我上面说的“保姆级”教程,他的内容面面俱到包括了Python开发的方方面面,......
  • 编辑可执行service weblogic start命令启动weblogic服务脚本
    转至:https://blog.csdn.net/VickHUC/article/details/88416046《一》创建weblogic文件,并编辑vi/etc/init.d/weblogic加入下面内容,如果是粘贴进去,切记要检查开头和末......
  • 推荐几个非常不错的富文本编辑器
    1、wangEditor——基于javascript和css开发的Web富文本编辑器,轻量、简洁、界面美观、易用、开源免费。界面截图:官网地址   2、TinyMCE——TinyMCE是一个轻量级......
  • 前端二面经典vue面试题指南
    v-model的原理?我们在vue项目中主要使用v-model指令在表单input、textarea、select等元素上创建双向数据绑定,我们知道v-model本质上不过是语法糖,v-model在内部为......
  • 百度前端经典vue面试题整理
    子组件可以直接改变父组件的数据吗?子组件不可以直接改变父组件的数据。这样做主要是为了维护父子组件的单向数据流。每次父级组件发生更新时,子组件中所有的prop都将会刷......
  • 自定义JeeSite组件DataGrid中的单选钮radio编辑项
    继续说说JeeSite中提供的DataGrid组件。作为传统的后端生成前端使用JqGrid来显示列表数据是非常方便的,JeeSite框架将JqGrid进行了包装,简化和规范了使用值得称赞,但毕竟JqGri......
  • 富文本编辑器 种类,下载官网等介绍
    富文本编辑器   富文本编辑器(RichTextEditor,RTE)是一种可内嵌于浏览器,所见即所得的文本编辑器。它提供类似于OfficeWord的编辑功能,方便那些不太懂HTML用户使......
  • R语言中axis 中调整标签与轴线的距离
     使用padj参数调整垂直距离;使用hadj参数调整水平距离;  001、padj参数par(mfrow=c(2,1))plot(1:10,cex=2,pch=17,xaxt="n",xlab="",main="0.5")......
  • 文件上传之解析漏洞及编辑器安全
    各个平台解析漏洞讲解参考文献:中间件漏洞IIS6/7简要说明-本地搭建Apache配置安全—vulhub.htaccessApache解析漏洞-低版本符合Apache低版本就有漏洞x.php.xxx.yyy......
  • 富文本编辑器(KindEditor)
    目录富文本编辑器文章内容区使用富文本编辑器富文本编辑器上传图片问题富文本编辑器文章内容区使用富文本编辑器KindEditor是一套开源的在线HTML编辑器,主要用于让用......