多维线性DP

2023-05-16

多维线性DP

72. 编辑距离

给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。

你可以对一个单词进行如下三种操作:

  • 插入一个字符
  • 删除一个字符
  • 替换一个字符

示例 1:

输入:word1 = “horse”, word2 = “ros”
输出:3
解释:
horse -> rorse (将 ‘h’ 替换为 ‘r’)
rorse -> rose (删除 ‘r’)
rose -> ros (删除 ‘e’)

示例 2:

输入:word1 = “intention”, word2 = “execution”
输出:5
解释:
intention -> inention (删除 ‘t’)
inention -> enention (将 ‘i’ 替换为 ‘e’)
enention -> exention (将 ‘n’ 替换为 ‘x’)
exention -> exection (将 ‘n’ 替换为 ‘c’)
exection -> execution (插入 ‘u’)

提示:

  • 0 <= word1.length, word2.length <= 500
  • word1word2 由小写英文字母组成

这里可以把 d p [ i ] [ j ] dp[i][j] dp[i][j]定义为 w o r d 1 word1 word1的前 i i i个字符到 w o r d 2 word2 word2的前 j j j个字符的最少操作数

d p [ i − 1 ] [ j ] dp[i - 1][j] dp[i1][j]看作是插入一个字符,然后 w o r d 1 word1 word1在第 i i i个位置上插入一个 w o r d 2. c h a r A t ( j ) word2.charAt(j) word2.charAt(j)字符

d p [ i ] [ j − 1 ] dp[i][j - 1] dp[i][j1]看作是删除一个字符然后 w o r d 2 word2 word2在第 j j j个位置上删除一个 w o r d 2. c h a r A t ( j ) word2.charAt(j) word2.charAt(j)字符

d p [ i − 1 ] [ j − 1 ] dp[i - 1][j - 1] dp[i1][j1]看作是替换一个字符然后 w o r d 1 word1 word1在第 i i i个位置的字符 w o r d 1. c h a r A t ( i ) word1.charAt(i) word1.charAt(i)替换成字符 w o r d 2. c h a r A t ( j ) word2.charAt(j) word2.charAt(j)

那么状态转移方程为:

$ dp[i][j] = Math.min(dp[i][j - 1] + 1, Math.min(dp[i - 1][j] + 1, dp[i - 1][j - 1] + ( word1.charAt(i - 1) != word2.charAt(j - 1) ? 1 : 0)))$

然后考虑一下初始化操作:

w o r d 2 word2 word2的长度为 0 0 0的时候, d p [ i ] [ 0 ] dp[i][0] dp[i][0]为第 i − 1 i-1 i1位的操作数加 1 1 1

w o r d 1 word1 word1的长度为 0 0 0的时候, d p [ 0 ] [ j ] dp[0][j] dp[0][j]为第 j − 1 j-1 j1位的操作数加 1 1 1

for (int i = 1; i <= n; i++) {
  dp[i][0] = dp[i - 1][0] + 1;
}
for (int j = 1; j <= m; j++) {
  dp[0][j] = dp[0][j - 1] + 1;
}

最后完整化代码:

class Solution {
    public int minDistance(String word1, String word2) {
        int n = word1.length();
      	int m = word2.length();
      	int[][] dp = new int[n + 1][m + 1];
      	for (int i = 1; i <= n; i++) {
          dp[i][0] = dp[i - 1][0] + 1;
        }
        for (int j = 1; j <= m; j++) {
          dp[0][j] = dp[0][j - 1] + 1;
        }
        for (int i = 1; i <= n; i++) {
          for (int j = 1; j <= m; j++) {
            dp[i][j] = Math.min(dp[i][j - 1] + 1, Math.min(dp[i - 1][j] + 1, dp[i - 1][j - 1] + ( word1.charAt(i - 1) != word2.charAt(j - 1) ? 1 : 0)));
          }
        }
      	return dp[n][m];
    }
}

这个题做懂之后,建议做一下

P1279 字串距离

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多维线性DP 的相关文章

  • java正则的使用

    java util regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包 它包括两个类 xff1a Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式 Matcher 一个
  • cas服务端动态servers

    一 什么是servers cas的分为服务端和客户端 xff0c 如果客户端要使用cas需要把自己的域名或ip注册到cas服务端才可以使用 默认的servers为静态的 src main resources services HTTPSan
  • cas 配置相关

    默认配置 span class token comment span span class token comment CAS Cloud Bus Configuration span span class token comment sp
  • Elasticsearch分词器

    内置分词器 中文分词器 这篇博客主要讲 xff1a 分词器概念 ES内置分词器 ES中文分词器 一 分词器概念 1 Analysis 和 Analyzer Analysis xff1a 文本分析是把全文本转换一系列单词 term token
  • java中的引用

    背景 最近在研究ThreadLocal中发现最终存储的ThreadLocalMap中的key为弱引用 xff0c 因此来分析下使用弱引用的原因 实验 引用链为 list 61 gt gt person1 因此在GC的时候 list还强引用三
  • charles

    Charles 的简介如何安装 Charles将 Charles 设置成系统代理Charles 主界面介绍过滤网络请求截取 iPhone 上的网络封包截取 Https 通讯信息模拟慢速网络修改网络请求内容给服务器做压力测试修改服务器返回内容
  • CAN通信

    CAN通信控制器通过两根线上的电位差来判断总线电平 xff0c 是ISO国际标准化的串行通信协议 总线电平分为显性电平和隐形电平 xff0c 二者必居其一 发送方通过总线上电平的变化将信息发送给接收方 CAN通讯是半双工的 xff0c 收发
  • maddpg 复现过程中遇到的问题

    最近在复现论文Multi Agent Actor Critic for Mixed Cooperative Competitive Environments https github com openai multiagent partic
  • 【解决】VSCode在windows下不能打开标准头文件

    鼠标放到标准头文件上 xff0c VSCode提示一下错误 xff1a include errors detected Please update your includePath IntelliSense features for thi
  • SPI通信方式总结

    SPI xff08 Serial Peripheral interface xff09 是一种同步串行传输规范 xff0c 也是单片机外设芯片串行外设扩展接口 xff0c 该接口是一种高速 xff0c 全双工 xff0c 同步的通信总线 x
  • 轮询机制的介绍

    轮询是一种CPU决策如何提供周边设备服务的方式 xff0c 又称 程控输入输出 xff08 Programmed I O xff09 是由CPU定时发出询问 xff0c 依序询问每一个周边设备是否需要其服务 xff0c 有即给予服务 xff
  • stm32面试题总结

    1 嵌入式系统中ROM RAM Register的概念和作用是什么 xff1f ROM是只读存储器 断电后能保证数据不会丢失 xff08 硬盘 xff09 RAM是随机存储器 断电后数据会丢失 xff08 内存 xff09 Register
  • 有刷电机,无刷电机和电调的总结

    有刷直流电机工作原理 xff1a 有刷直流电机的主要结构就是定子 43 转子 43 电刷 xff0c 通过旋转磁场获得转动力矩 xff0c 从而输出动能 电刷与换向器不断接触摩擦 xff0c 在转动中起到导电和换相作用 有刷直流电机采用机械
  • leetcode刷题(五)——找出数组中唯一出现的数

    给定一个只包含整数的有序数组 nums xff0c 每个元素都会出现两次 xff0c 唯有一个数只会出现一次 xff0c 请找出这个唯一的数字 你设计的解决方案必须满足 O log n 时间复杂度和 O 1 空间复杂度 示例 1 输入 nu
  • leetcode刷题(六)——快乐数

    编写一个算法来判断一个数 n 是不是快乐数 快乐数 定义为 xff1a 对于一个正整数 xff0c 每一次将该数替换为它每个位置上的数字的平方和 然后重复这个过程直到这个数变为 1 xff0c 也可能是 无限循环 但始终变不到 1 如果这个
  • leetcode刷题(七)——移动零

    给定一个数组 nums xff0c 编写一个函数将所有 0 移动到数组的末尾 xff0c 同时保持非零元素的相对顺序 请注意 xff0c 必须在不复制数组的情况下原地对数组进行操作 示例 1 输入 nums 61 0 1 0 3 12 输出
  • STM32 HAL库 串口接收不定长数据(帧头)

    写的比较垃圾 xff0c 将就着用 欢迎各位大佬指导 xff0c 我这里要用串口中断接收两种帧头的数据 xff0c 1 以0x0D 0x0A为帧头的数据 2 xff0c 以0x55 0xA5为帧头的数据 两数据包帧头不同 大小不同 其中定义
  • freeRTOS系列教程之【第一章】FreeRTOS概述与体验

    文章目录 教程目录1 1 FreeRTOS目录结构1 1 FreeRTOS目录结构1 2 核心文件1 3 移植时涉及的文件1 4 头文件相关 1 4 1 头文件目录1 4 2 头文件 1 5 内存管理1 6 Demo1 7 数据类型和编程规
  • 【RTOS的最通俗理解】行业大佬用一篇文章带你快速理解RTOS

    文章目录 单片机 RTOS 架构 1 RTOS的概念 1 1 用人来类比单片机程序和RTOS 1 1 1 我无法一心多用1 2 2 我可以一心多用 1 2 程序简单示例 2 架构的概念 2 1 用人来类比电子产品2 2 要深入理解RTOS就
  • 开源网络模拟器ns-3 架构与实践

随机推荐

  • 四、freeRTOS_同步互斥与通信概述

    目录 1 同步与互斥的概念 2 同步的例子 xff1a 有缺陷 3 互斥的例子 xff1a 有缺陷 4 通信的例子 xff1a 有缺陷 5 FreeRTOS的解决方案 对应程序 xff1a 12 freertos example sync
  • 五、freeRTOS_队列的使用

    目录 1 队列的理论讲解 1 1 常规操作 2 队列的常规使用 3 队列集 1 队列的理论讲解 1 1 常规操作 队列的简化操如入下图所示 xff0c 从此图可知 xff1a 队列可以包含若干个数据 xff1a 队列中有若干项 xff0c
  • 从零开始的leetcode刷题(使用python)Day1

    从零开始用python刷leetcode xff0c 随手记录一些tips 1 哈希表 xff08 leetcode第一题两数之和 xff09 哈希表也叫作散列表 xff0c 数据结构提供了键 xff08 key xff09 和值 xff0
  • [深度学习] 神经网络中的 batch 和 epoch

    参考文章为 神经网络中Batch和Epoch之间的区别是什么 xff1f Sample Sample是单个数据 即有意义的数据的最小单位 训练数据集由许多Sample组成 batch batch是一个人为设定的超参数 batch的意思是 批
  • Windows开启ftp服务-使用Xlight FTP Server

    适用于windows系统 xff0c 使用Xlight FTP Server软件 下载地址 xff1a 点击此处下载 1 将下面的软件 xff0c 安装在电脑上 2 开启ftp服务 点击程序主界面左上角 xff0c 默认端口号为21 xff
  • 控制理论中的常用定义与定理

    以下内容摘自 应用非线性控制 对于自治系统 xff08 在本书中与定常系统等价 xff09 一句话总结 xff1a 初始状态的足够小能够保证系统状态范数的任意小 不变集理论可以在V导为半负定时推导出渐进稳定的结论 xff0c 但只适用于自治
  • centos8服务器安装nginx

    安装nginx 安装依赖包 yum span class token parameter variable y span span class token function install span gcc zlib zlib devel
  • 部署hexo遇到报错ERROR Deployer not found: git的解决办法

    部署hexo遇到报错ERROR Deployer not found git的解决办法 今天部署hexo的时候遇到一个报错 hexo c span class token operator amp amp span hexo g span
  • npm install hexo-renderer-sass时报错解决办法

    npm install hexo renderer sass时报错 在安装配置hexo博客的时候 xff0c 有的主题需要安装 span class token function npm span span class token func
  • 实用工具网站推荐

    速写板 可以随时开一个web网页进行书面草稿的网站
  • kaggle 免费gpu,optuna学习,python中*的用法

    kaggle import optuna def obj trial x 61 trial suggest float 34 x 34 7 7 y 61 trial suggest float 34 y 34 7 7 return x 1
  • BFS题单总结

    BFS题单汇总 此文章用来记录遇到的经典的从某个点到达某个边界或者指定点的BFS题目 xff0c 将持续更新 1926 迷宫中离入口最近的出口 span class token keyword class span span class t
  • Java/C++输入输出特定格式模板总结

    Java输出每个数字占5个空格 xff0c 此输出模式见洛谷1443题 span class token class name System span span class token punctuation span out span c
  • DFS题单以及模板汇总

    此文章是为了记录自己学习DFS算法以及记录写过的DFS题单汇总 xff0c 持续补充 P1605 迷宫 迷宫 题目描述 给定一个 N M N times M N M 方格的迷宫 xff0c 迷宫里有
  • MacOS 用typora和picGo配置腾讯云COS图床

    MacOS 用typora和picGo配置腾讯云COS图床 首先去PicGo最新下载网址 xff0c 点击PicGo 2 3 0 dmg下载后安装 安装好了之后双击之后没有看到对应的启动icon xff0c 实际上是在上面的标题栏的右侧 x
  • 线段树 模板 Java语言版

    线段树 模板 Java语言版 P3373模板 线段树 2 题目描述 如题 xff0c 已知一个数列 xff0c 你需要进行下面三种操作 xff1a 将某区间每一个数乘上 x x x 将某区间每一个数加上 x
  • macos上VS Code上配置Python、Java、C++环境变量

    macos上VS Code上配置Python Java C 43 43 环境变量 首先打开设置 然后在搜索框输入set xff0c 去编辑settings json文件 下面是我本机上的配置文件 xff0c 记录一下 然后vs code上安
  • MacOS上的VS Code设置鼠标滚动轮 + Commond缩放

    路径 xff1a Code gt Preferences gt Settings 然后在搜索框中输入set去搜索 xff0c 接着点击Edit in settings json 添加这一行 34 editor mouseWheelZoom
  • MacOS Clion 使用<bits/stdc++.h>万能头提示 fatal error: ‘bits/stdc++.h‘ file not found

    MacOS Clion 使用 lt bits stdc 43 43 h gt 万能头提示 fatal error bits stdc 43 43 h file not found 百度搜了一圈答案 xff0c 都大坑了 xff0c 自己亲自
  • 多维线性DP

    多维线性DP 72 编辑距离 给你两个单词 word1 和 word2 xff0c 请返回将 word1 转换成 word2 所使用的最少操作数 你可以对一个单词进行如下三种操作 xff1a 插入一个字符删除一个字符替换一个字符 示例 1