当前位置: 首页 > news >正文

算法: 动态规划 编辑距离 Edit Distance / Levenshtein Distance

编辑距离

编辑距离是用来量化两个字符串差异程度的概念。将一个字符串转变成另外一个需要多少步操作(操作分为添加、替换和删除单个字符)。编辑距离又被称为Levenshtein距离,以前苏联计算机科学家Vladimir Levenshtein命名。

算法:
var editDistance = function(s1, s2) {
  var m = s1.length
  var n = s2.length
  // dp 为原字符串前i个字符和目标字符串前j个字符的编辑距离
  var dp = new Array()
  for (let i = 1; i <= n; i++) {
    dp[i] = new Array()
    for (let j = 1; j <= m; j++) {
      dp[i][j] = 0
    }
  }
  // 原字符串转化成空字符串
  for (let i = 1; i<=n; i++) {
    dp[0][i] = i
  }
  // 目标字符串转化成空字符串
  for (let i = 1; i<=m; i++) {
    dp[i][0] = i
  }
  // 计算dp数组
  for (let i = 1; i <= n; i++) {
    for (let j = 1; j <= m; j++) {
      if (s1[i - 1] = s2[j - 1]) { // 字符相同
        dp[i][j] = dp[i - 1][j - 1]
      } else {
        dp[i][j] = 1 + Math.min(dp[i - 1][j - 1], // 替换
          Math.min(dp[i][j - 1], // 插入
            dp[i - 1][j])) // 删除
      }
    }
  }
  return dp[n][m]
}

例:

在这里插入图片描述
最后的答案即是最右下角的值

相关文章:

  • 【Salesforce】【Apex】Trigger中不通过soql查询记录类型的开发名称
  • 【Programming Languages And Lambda calculi】 1.2 ~ 1.3 关系、赋值与关系
  • 【Programming Languages And Lambda calculi】 1.4 有向赋值
  • 【算法】 动态规划 基础题库 1-7 python实现
  • 【Programming Languages And Lambda calculi】 1.5 ~ 1.7 上下文规约 赋值函数 符号摘要
  • 【Programming Languages And Lambda calculi】第二章 结构归纳法 2.1 基础
  • 【Programming Languages And Lambda calculi】2.2 ~ 2.3 定义中的省略,证明树中的归纳
  • 【Programming Languages And Lambda calculi】2.4 ~ 2.5 多重结构,更多的定义与证明 第二章结束
  • 【Programming Languages And Lambda calculi】第三章 求值一致性 Church-Rosser 关系 (本章仅一节)
  • 【Programming Languages And Lambda calculi】第四章 Lambda演算 / Lambda表达式 4.1 演算中的函数 柯里化
  • 【Programming Languages And Lambda calculi】4.2 Lambda演算的语法与约化
  • 【Programming Languages And Lambda calculi】4.3 Lambda 表达式中给布尔值编码
  • 【Programming Languages And Lambda calculi】4.4 Lambda 表达式 对值编码
  • 【Programming Languages And Lambda calculi】4.5 Lambda 表达式 数值编码
  • 【Programming Languages And Lambda calculi】4.6 Lambda表达式 递归 (重要,建议彻底弄懂)
  • 230. Kth Smallest Element in a BST
  • Android优雅地处理按钮重复点击
  • HTTP--网络协议分层,http历史(二)
  • nodejs:开发并发布一个nodejs包
  • Shadow DOM 内部构造及如何构建独立组件
  • Spark学习笔记之相关记录
  • Swoft 源码剖析 - 代码自动更新机制
  • vue-cli3搭建项目
  • 从重复到重用
  • 猴子数据域名防封接口降低小说被封的风险
  • 基于 Babel 的 npm 包最小化设置
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 小而合理的前端理论:rscss和rsjs
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 智能合约Solidity教程-事件和日志(一)
  • 1.Ext JS 建立web开发工程
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​【已解决】npm install​卡主不动的情况
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​插件化DPI在商用WIFI中的价值
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #AngularJS#$sce.trustAsResourceUrl
  • #DBA杂记1
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #Linux(帮助手册)
  • #Spring-boot高级
  • (23)Linux的软硬连接
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .CSS-hover 的解释
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET中GET与SET的用法
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [C#]科学计数法(scientific notation)显示为正常数字
  • [C++基础]-初识模板