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

力扣72. 编辑距离

动态规划

  • 思路:
    • 假设 dp[i][j] 是 word1 长度 i 和 word2 长度 j 的编辑距离;
    • 有三种编辑方式:插入、删除、替换,即 word1 插入、word2 插入、替换;
    • 那么 dp[i][j] 可以是:
      • dp[i - 1][j] 在 word1 中插入一个字符;
      • dp[i][j - 1] 在 word2 中插入一个字符;
      • dp[i - 1][j - 1] 如果 word1[i - 1] == word2[j - 1](word1 的第 i 个字符与 word2 的第 j 个字符相等)那么 dp[i][j] = dp[i - 1][j - 1],否则需要进行一次替换;
    • dp[i][j] 选择三种编辑中距离最小的即可;
    • 边界条件:
      • dp[i][0] = i (word2 插入 i 次)
      • dp[0][j] = j (word1 插入 i 次)
class Solution {
public:int minDistance(string word1, string word2) {int m = word1.size();int n = word2.size();if (m * n == 0) {return m + n;}std::vector<std::vector<int>> dp(m + 1, std::vector<int>(n + 1));for (int i = 0; i < m + 1; ++i) {dp[i][0] = i;}for (int j = 0; j < n + 1; ++j) {dp[0][j] = j;}for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; ++j) {int dp1 = dp[i - 1][j] + 1;int dp2 = dp[i][j - 1] + 1;int dp3 = dp[i - 1][j - 1];if (word1[i - 1] != word2[j - 1]) {dp3 += 1;}dp[i][j] = std::min(dp1, std::min(dp2, dp3));}}return dp[m][n];}
};

——————————————————————————————————

相关文章:

  • 系统架构设计师-22年-论文题目
  • 【Redis】list以及他的应用场景
  • PDF标准详解(一)——PDF文档结构
  • vue中,使用file-saver导出文件,下载Excel文件、下载图片、下载文本
  • C# 命名管道NamedPipeServerStream使用
  • Spring依赖注入
  • 响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-3 getBoundingClientRect()
  • 【基础算法练习】单调队列与单调栈模板
  • LabVIEW扫频阻抗测试系统
  • 回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测(含优化前后预测可视化)
  • vue 跨域XMLHttpRequest
  • 如何使用 WebRTC 与 Kurento 建立视频会议 App
  • 如何成为一个更好的沟通者?
  • 粒子群优化算法(Particle Swarm Optimization,PSO)求解基于移动边缘计算的任务卸载与资源调度优化(提供MATLAB代码)
  • navicat连接postgresql、人大金仓等数据库报错
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • chrome扩展demo1-小时钟
  • Javascript Math对象和Date对象常用方法详解
  • Java小白进阶笔记(3)-初级面向对象
  • Lucene解析 - 基本概念
  • Map集合、散列表、红黑树介绍
  • Protobuf3语言指南
  • Python学习之路13-记分
  • React的组件模式
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • win10下安装mysql5.7
  • 程序员该如何有效的找工作?
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 后端_MYSQL
  • 基于webpack 的 vue 多页架构
  • 计算机常识 - 收藏集 - 掘金
  • 类orAPI - 收藏集 - 掘金
  • 力扣(LeetCode)965
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 爬虫模拟登陆 SegmentFault
  • 树莓派 - 使用须知
  • 算法之不定期更新(一)(2018-04-12)
  • 详解移动APP与web APP的区别
  • 小程序开发中的那些坑
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 从如何停掉 Promise 链说起
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (1)Android开发优化---------UI优化
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (编译到47%失败)to be deleted
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (六)激光线扫描-三维重建
  • (万字长文)Spring的核心知识尽揽其中
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (译) 函数式 JS #1:简介
  • (转)jdk与jre的区别