编辑距离不仅是动态规划里很经典的例题,也是面试中高频出现的题目,需要我们好好掌握。

学完本文,你可以尝试实现

洛谷P2758 编辑距离

Leetcode 72.编辑距离

题目介绍

洛谷例题

题目描述

设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:

1、删除一个字符;

2、插入一个字符;

3、将一个字符改为另一个字符;

!皆为小写字母!

输入格式

第一行为字符串A;第二行为字符串B;字符串A和B的长度均小于2000。

输出格式

只有一个正整数,为最少字符操作次数。

输入输出样例

输入 1

sfdqxbw
gfdgw

输出 1

4

Leetcode例题

编辑距离详解过程

前言

如果你刚刚听说动态规划,还不太明白 dp 为啥要定义成这样,转移方程是啥。
欢迎来看一下这篇题解,看完能稍微理解一下动态规划到底做了什么事?
或许芭。

思路

1.动态规划

2.定义 dp[i][j]

21. dp[i][j] 代表 word1 中前 i 个字符,变换到 word2 中前 j 个字符,最短需要操作的次数
  22. 需要考虑 word1 或 word2 一个字母都没有,即全增加/删除的情况,所以预留 dp[0][j] 和 dp[i][0]

3.状态转移

31. 增,dp[i][j] = dp[i][j - 1] + 1
  32. 删,dp[i][j] = dp[i - 1][j] + 1
  33. 改,dp[i][j] = dp[i - 1][j - 1] + 1
  34. 按顺序计算,当计算 dp[i][j] 时,dp[i - 1][j] , dp[i][j - 1] , dp[i - 1][j - 1] 均已经确定了
  35. 配合增删改这三种操作,需要对应的 dp 把操作次数加一,取三种的最小
  36. 如果刚好这两个字母相同 word1[i - 1] = word2[j - 1] ,那么可以直接参考 dp[i - 1][j - 1] ,操作不用加一

图解

绿色:增
红色:删
黄色:改

大功告成!

解题代码 洛谷

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
//楼上为一些头文件
using namespace std ;const int kMaxLen = 2000 + 5 ;//字符串长度最大为2000,定义数组的时候就加个5int len1 , len2 , dp[kMaxLen][kMaxLen] ;
//len1表示字符串A的长度
//len2表示字符串B的长度
string s1 , s2 ;
//s1:A字符串
//s2:B字符串
int main(){cin >> s1 >>  s2 ;//输入字符串len1 = s1.size() ;len2 = s2.size() ;//用size()函数取长度for(int i = 1 ; i <= len1 ; i++ ){dp[i][0] = i ;}for(int i = 1 ; i <= len2 ; i++ ){dp[0][i] = i ;}//dp部分代码:for(int i = 1 ; i <= len1 ; i++ ){//枚举A字符串的字符for(int j = 1 ; j <= len2 ; j++ ){//枚举B字符串的字符if(s1[i - 1] == s2[j - 1])//字符串是从零开始的所以要减一dp[i][j] = dp[i - 1][j - 1] ;//不变}else{dp[i][j] = min(min(dp[i][j - 1] + 1 , dp[i - 1][j] + 1) , dp[i - 1][j - 1] + 1) ;//删除,添加,替换}}}cout << dp[len1][len2] ; //输出结果return 0 ;结束了}

解题代码 Leetcode

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

动态规划——编辑距离相关推荐

  1. 动态规划编辑距离_使用动态规划方法解决编辑距离问题

    动态规划编辑距离 使用动态编程(DP)解决问题时出现的第一个问题是如何弄清楚DP是解决问题的一种方法? 因此,我将使用动态编程解决问题,并说明如何解决这一问题. "明确说明的问题是一半解决的 ...

  2. 动态规划--编辑距离问题

    文章目录 1 编辑距离问题 1 编辑距离问题 定义: 给定字符串A和字符串B,我们可以进行替换.插入.删除三种操作,使得字符串A和字符串B相等的最小操作次数,称为从字符串A到字符串B的最小编辑距离. ...

  3. 算法之动态规划——编辑距离问题

    编辑距离问题 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交:60 测试通过:19 描述 设A和B是2个字符串.要用最少的字符操作将字符串A转换为字 ...

  4. labuladong的算法小抄pdf_真漂亮!这份GitHub上爆火的算法面试笔记,助你圆满大厂梦...

    前言 Github作为程序员们的后花园,一直以来都是程序员最喜欢逛逛.学习的地方,小编也不例外,最近看到一份对标BAT等一线大厂的算法面试笔记,已经标星68+K了,很是惊讶,看了一下,觉得知识点整理得 ...

  5. 算法工程师思维导图—数据结构与算法

    卖萌屋的妹子们(划掉)作者团整理的算法工程师思维导图,求职/自我提升/查漏补缺神器.该手册一共分为数据结构与算法.数学基础.统计机器学习和深度学习四个部分. 点击这里查看具体使用指南.该手册有两种获取 ...

  6. 找到所有数组中消失的数字_【一点资讯】千万程序员的呼声:面试如何拿到大厂Offer?这份阅读量超过11W+的算法刷题宝典请你原地查收 www.yidianzixun.com...

    如何才能通过面试拿到大厂Offer? "刷leetcode!" 这是我听到最多的回答! 现在越来越多的人应聘工作时都得先刷个几十百来道题,不刷题感觉都过不了面试. 无论是面测试.算 ...

  7. 搬砖试金石!github星标7W算法刷题宝典,还愁拿不下大厂offer?

    前言 这几年IT技术蓬勃发展,日新月异,对技术人才的需求日益增长,程序员招聘市场也如火如荼.在有限的三五轮面试中,国外流行让面试者编程解决某些数据结构和算法的题目,通过观察面试者编码的熟练程度.思考的 ...

  8. Github惊现高星神作,两份算法宝典让你横扫大厂算法面试题

    前言 有些小伙伴可能会有疑惑,为什么面试总喜欢问算法与数据结构问题,这是有原因的 首先,算法能看出一个程序员的 基本功 ,数据结构与算法是计算机领域里面最最基础的学科,其他更高级的领域都或多或少都涉及 ...

  9. 腾讯T3整理分享的LeetCode算法小抄完整文档

    前言 本文⽬前可以⼿把⼿带你解决 110 道 LeetCode 算法问题,⽽且在不断更新,全部基于 LeetCode 的题⽬,涵盖了所有题型和技巧. 目录 主要内容 ⽬前已包含的 114 道题⽬教程如 ...

最新文章

  1. 白洋组公众号-植物微生组33天受邀原创-诚邀同行分享经验
  2. mysql保留2位小数字段如何设置 浮点数
  3. WordPress备份的七种办法
  4. 【CV】通俗易懂的目标检测 | RCNN, SPPNet, Fast, Faster
  5. 对某公司一次***测试
  6. UVA 11732 - strcmp() Anyone?(Trie)
  7. linux 创建文件夹快捷方式
  8. Git 管理工具 SourceTree 的使用(上手简单,不熟悉git命令的开发者必用)
  9. 助力自动驾驶商业化 高德公布高精地图技术路线图
  10. 推荐系统之NFM原理与实现学习
  11. 在制作蓝牙小车app中遇到的坑
  12. Gboard导入简体中文词库,详细操作教程。
  13. A4纸尺寸大小是多少
  14. 游戏开发-国外的10 个最佳的独立游戏开发社区网站
  15. 计算机如何修改用户名和密码忘了怎么办,电脑用户名密码忘记怎么办
  16. 见闻-关于codec芯片
  17. RRPP相切环配置示例
  18. Scratch软件编程等级考试一级——201909
  19. 刷脸支付助力互联网产业时代全面到来
  20. 怎么申请沙特SABER认证及流程如何

热门文章

  1. React中组件间通信的方式
  2. corners边框_第11天|16天搞定前端,CSS的圆角边框,让人赏心悦目
  3. python 写csv scrapy_Python神技能 | 使用爬虫获取汽车之家全车型数据
  4. 域名升级访问中拿笔记好_SEO优化中如何让你的页面访问速度更快
  5. Mybatis高级应用 多表关联查询
  6. Ueditor setContent内容含引号显示异常
  7. java验证码Kaptcha
  8. WriteFreely:创建博客,建立社区
  9. Dockter:研究人员的容器图像生成器
  10. 脚本化HTTP 取得响应 指定请求