文章目录

  • 1 编辑距离问题

1 编辑距离问题

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

给定字符串“abc”和“dbd”,我们要想得到从“abc”到“dbd”的最小编辑距离,可以有以下几种计算路径:

  • 已知“ab”到“dbd”的编辑距离为x,由于“ab”经过x次操作已经和“dbd”相等,“abc”相对于“ab”来说增加了一个字符’c’,那么“abc”就需要将字符’c’进行删除操作,那么从“abc”到“dbd”的编辑距离就为distance1 = x+1。删除字符操作
  • 已知“ab”到“db”的编辑距离为y,由于“ab”经过y次操作已经和“db”相等,“abc”相对于“ab”增加了一个字符’c’,“dbd”相对于“db”也就只增加了一个字符’d’,此时我们只需要做一步替换操作即可,将’c’替换换成’d’即可,那么从"abc"到"dbd"的编辑距离就为distance = y + 1。替换字符操作
  • 已知“abc”到“db”的编辑距离为z,由于“abc”经过x次操作已经和“db”相等,“dbd”相对于“db”来说增加了一个字符’d’,那么“abc”就需要再增加1个字符“d”,那么从“abc”到“dbd”的编辑距离就为distance1 = z+1。增加字符操作

以上三种情况中的最小值,就是我们求解的最小编辑距离。

我们可以沿着以上思路继续往下分解,直到两个都从空字符开始,我们每次都只保留最优解,然后在此基础上进行递推,这就是动态规划。

递推表格如下:

我们只需要取3个中间的最小值即可。

写明白还挺难的,先不写了,上面的描述够自己看懂了,直接上代码,哈哈哈哈哈哈。

 public static int getStrDistance(String str1, String str2){if ((str1 == null) || (str2 == null)){return -1;}int[][] distance = new int[str1.length()+1][str2.length()+1];for (int i=0; i<str1.length()+1; i++){distance[i][0] = i;}for (int i=0; i<str2.length()+1; i++){distance[0][i] = i;}for (int i=1; i<str1.length()+1; i++){for (int j=1; j<str2.length()+1; j++){int add_distance = distance[i-1][j] + 1;int del_distance = distance[i][j-1] + 1;int replace_distance = distance[i-1][j-1];if (str1.charAt(i-1) != str2.charAt(j-1)){replace_distance += 1;}int min = Math.min(add_distance, del_distance);distance[i][j] = Math.min(min, replace_distance);}}return distance[str1.length()][str2.length()];}

动态规划--编辑距离问题相关推荐

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

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

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

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

  3. 动态规划——编辑距离

    编辑距离不仅是动态规划里很经典的例题,也是面试中高频出现的题目,需要我们好好掌握. 学完本文,你可以尝试实现 洛谷P2758 编辑距离 Leetcode 72.编辑距离 题目介绍 洛谷例题 题目描述 ...

  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. DHCP的安装与分配
  2. 【控制】《复杂运动体系统的分布式协同控制与优化》-方浩老师-第6章-操作度优化条件下的移动机械臂协同搬运控制
  3. 台湾国立大学郭彦甫Matlab教程笔记(15)polynomial integration 多项式积分
  4. 把软件放到图片里(超强)
  5. 算法:模式匹配之KMP算法
  6. bootstrap 模态框满屏_如何设置Bootstrap模态框modal的高度和宽度?
  7. React Native开发学习笔记——WebStorm运行项目
  8. 豆瓣最高评分8.1!万维钢:读懂这本书,你会比身边人更深的理解这个时代
  9. python面向对象中的类
  10. 查看python安装位置图_python安装路径怎么找
  11. SAP License:由师姐的包包所想到如何能够掌握客户的需求
  12. 通用窗口类 Inventory Pro 2.1.2 Demo1(中)
  13. RadASM配色方案工具fix
  14. microsoft store 微软应用商店打不开?所有教程都尝试了一遍,居然是因为这个
  15. android前置摄像头预览,android - 当选择了前置摄像头CameraX预览没有显示任何东西 - 堆栈内存溢出...
  16. AIX 5300-06-01 + Oracle 9.2.0.6 = ORA-27061
  17. 淘宝违规考试软件1.0
  18. Android添加Flurry统计
  19. 工具应用——Chrome浏览器 F12控制台中文改成英文
  20. 【微机原理与接口技术】简单易学的 简单接口芯片—— 三态门 74LS244和 锁存器 74LS273

热门文章

  1. 【数理知识】《矩阵论》方保镕老师-第1章-矩阵的几何理论
  2. 【arduino】arduino ISP下载程序方法,用arduino uno给M5 Module DC MOTOR下载程序
  3. 这个口罩小朋友戴上就不肯脱!真相原来是这样!
  4. 数字预失真技术基本原理
  5. 业内首创普惠保险,看国泰产险如何借助数据进行智能化的升级和战略转型
  6. 16.4 配置Tomcat监听80端口 16.5/16.6/16.7 配置Tomcat虚拟主机16.8 Tomcat日志
  7. Ubuntu 16.04下用Wine运行的软件出现方块的解决思路(应该是兼容现在所有平台的Wine碰到这个的问题)...
  8. [新活动] 2015年推广返利活动
  9. tomcat、腾讯云主机和微信
  10. C# Azure 存储-分布式缓存Redis的新建配置查看