题解-编辑距离

题解:AcWing 899 编辑距离 题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。个字符串中有多少个字符串可以在上限操作次数内经过操作变成询问给出的字符串。行,每行输出一个整数作为结果,表示一次询问中满足条件的字符串个数。每个对字符串进行的单个字符的插入、删除或替换算作一次操作。次询问,每次询问给出一个字符串和一个操作次数上限。行,每行包含一个字符串和一个整数,表示一次询问。行,每行包含一个字符串,表示给定的字符串。字符串中只包含小写字母,且长度均不超过。本文分享的必刷题目是从。 阅读详情

题目描述

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

1、删除一个字符;

2、插入一个字符;

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

!皆为小写字母!

输入格式

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

输出格式

只有一个正整数,为最少字符操作次数。
输入输出样例

输入 #1

sfdqxbw
gfdgw

输出 #1

4

解析部分

状态转移方程

首先思路为DP(一看就是),包含了数论字符串之类的东西。按老套路,一个二维数组DP[i][j],推出状态转移方程。

一共有三种状态转移方程在这里可以用:

  • 直接插入字符串
Created with Raphaël 2.2.0 插入 f[i-1][j] f[i][j] 完成 yes no

f[i][j]=f[i-1][j]+1;

  • 删除字符串即可
Created with Raphaël 2.2.0 删除 f[i][j-1] f[i][j] 完成 yes no

f[i][j]=f[i][j-1]+1;

  • 直接将替换字符串输出
Created with Raphaël 2.2.0 替换 f[i-1][j-1] f[i][j] 完成 yes no

将这三个方程合到一起就成为:dp[i][j]=min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1
答案就是dp[a子串的长度][b字串的长度];


简化

但是,这样做会不会太麻烦了?——YES
我们可以直接将b数组(char类型)变成i,将所有的串成为i。
这些是初始化,我们重点在于方程,有了上面的解释,在做也不难。
dp[j]=min(min(dp[j-1],dp[j]),dp[j-1])+1;
答案就变成了dp[b子串的长度];


代码部分

代码解析

  • 初始化
cin>>s>>p;
	int x=strlen(s),y=strlen(p);
	for(int i=1;i<=y;i++){
		b[i]=i;
	}
  • 第二部初始化
	a[0]=i,b[0]=i-1;
  • 如果可以替换字符串的话
	if(s[i-1]==p[j-1]){
				a[j]=b[j-1];
  • 否则就状态转移方程

a[j]=min(min(b[j],b[j-1]),a[j-1])+1;

  • 继续执行
	for(int k=1;k<=y;k++){
			b[k]=a[k];
		}

代码

#include<bits/stdc++.h>
using namespace std;
int a[100000],b[100000];
char s[100000],p[100000];
int main(){
	cin>>s>>p;
	int x=strlen(s),y=strlen(p);
	for(int i=1;i<=y;i++){
		b[i]=i;
	}
	for(int i=1;i<=x;i++){
		a[0]=i,b[0]=i-1;
		for(int j=1;j<=y;j++){
			if(s[i-1]==p[j-1]){
				a[j]=b[j-1];
			}else{
				a[j]=min(min(b[j],b[j-1]),a[j-1])+1;
			}
		}
		for(int k=1;k<=y;k++){
			b[k]=a[k];
		}
	}
	cout<<a[y];
	return 0;
}
TC3xx芯片中断配置避坑指南:从AUTOSAR Davinci配置到SRN地址计算的完整流程 本文详细解析了英飞凌TC3xx芯片的中断配置流程,从AUTOSAR Davinci工具链到硬件调试的全链路指南。重点介绍了中断路由(IR)模块、服务请求节点(SRN)和中断控制单元(ICU)的配置技巧,帮助开发者避开常见陷阱,优化中断性能。 阅读详情

相关推荐

微信聊天记录数据库解密实战:从WCDB到sqlcipher4的关键步骤解析

本文详细解析了微信桌面版聊天记录数据库的解密实战过程。通过逆向分析,定位了微信从WCDB框架到sqlcipher4加密的关键步骤,并成功提取了数据库密钥。文章重点介绍了如何通过动态调试、字符串定位等方法,追踪并验证sqlcipher4的加密密钥,最终实现对加密数据库文件的解密操作,为安全研究和数据恢复提供了技术参考。

weixin_29322553的博客 1071

【Hot100】LeetCode—72. 编辑距离

72. 编辑距离。

weixin_44382896的博客 711

VirtualBox虚拟机拖放文件总失败?手把手教你配置双向拖放与共享文件夹(Ubuntu版)

本文详细指导如何在VirtualBox的Ubuntu虚拟机中配置高效的数据交换方案。核心是安装VirtualBox Guest Additions,并在此基础上开启双向拖放与共享粘贴板功能,同时建立稳定的共享文件夹,彻底解决主机与虚拟机间文件传输失败的问题,构建无缝的跨系统工作环境。

weixin_29245767的博客 232

【算法题】编辑距离(动态规划),一文彻底弄懂!

那么,问题来了,我们该如何初始化第一行和第一列的数据呢? 比如,word1为abc,word2为dcdb。我们初始化第一行的时候,那就是要求出a分别转换成d、dc、dcd、dcdb时的最少操作次数。显然这样初始化是非常麻烦的,甚至是不可完成的!那么我们再假设word1为zabc,word2为zdcdb。此时我们初始化第一行的时候,则就是求z分别转换成z、zd、zdc、zdcd、zdcdb时的最少操作次数。显然这个时候就很简单了对应最少操作次数其实就是j的值。 那么,灵感

胜人者有力,自胜者强! 2073

Quartus ||———基于Verilog HDL的数字秒表设计实验

Quartus ||———基于Verilog HDL的数字秒表设计实验一、实验目的二、实验步骤(一)新建工程(二)添加设计文件(三)综合分析与功能仿真1、综合分析2、功能仿真 一、实验目的 用Verilog HDL设计一个数字跑表,所需引脚和功能如下: 二、实验步骤 (一)新建工程 在创建好工程名称后,选定芯片类型 (二)添加设计文件 新建Verilog文件,键入代码如下 module n_clk_top( input clk, input rese

TBMmagic的博客 5525

2023年美高赛HiMCM:A题蒲公英 思路

蒲公英,通常称为蒲公英,是一种原产于欧亚大陆的植物,现在在世界各地都可以找到[1]。这种植物很容易通过其亮黄色的花朵(图1)和独特的“马勃”种子头(图2)来识别。该头部的每颗种子都附着在一个类似降落伞的结构上,称为“冠毛”,有利于风的传播[2]。如果处于“马勃”阶段的单个蒲公英毗邻一块开阔的一公顷土地,请创建一个数学模型来预测蒲公英在 1、2、3、6 和 12个月内的传播情况。确保您的模型考虑了各种气候条件(例如温带、干旱和热带气候)对蒲公英生长的影响。2. 蒲 公英、人类和其他植物之间的关系很复杂。

斌擎科技 7402

【动态规划】求解编辑距离问题

编辑距离问题是求解将⼀个字符串转换为另⼀个字符串所需的插⼊、删除、替换的最小次数。

恭仔的博客 1万+

C++软件异常分析概述

本文将详细讲述Windows系统中软件异常的分类以及常用的排查方法,给大家提供一个借鉴与参考。

dvlinker的技术专栏 4万+

【LeetCode每日一题系列】编辑距离

提示: 文章目录前言总结 前言 总结

haojz 1895

网络管理与维护综合实训2:基于AD证书服务构建企业内部HTTPS安全访问体系

本实训项目通过在Windows Server 2022环境下搭建AD域、DNS服务和Web服务器,实现安全的企业网站访问。主要内容包括:在两台服务器上安装操作系统并配置网络;在S1服务器上部署活动目录域、证书服务和Web服务;创建两个网站(HTTP和HTTPS);配置DNS记录和SSL证书;设置防火墙规则限制HTTP访问而允许HTTPS访问。通过实践掌握了AD证书管理、DNS配置、Web服务器设置及防火墙规则配置等关键技能,为网站管理工作奠定了基础,同时认识到证书管理在Web安全中的重要性。

深耕计算机专业知识与技术。 997

基于MATLAB开发AUTOSAR软件应用层模块-part2.建立一个AUTOSAR的模型,并生成autosar格式代码

上一篇我们建立了一个空模型,这篇我们接着上篇文章,建立一个简单的模型 点击 Library Browser,打开simulink模块库,见下图 左侧是模块库的列表,右侧是每个模块库里包含的具体的模块。 点击通用模块库,里边是一些常见的模块, 我们选取里边的3个模块,分别是输入,输出和增益三个模块,右键点击模块,选择add block to model xx,可以把模块添加到模型中。 然后练好连线 一个简单的模型就搭建好了,之后我们修改配置,将模型修改为AUT...

汽车软件开发 3302

编辑距离

1. 编辑距离定义        今天我们来研究一个有趣的算法题,叫做字符串编辑距离。编辑距离研究的问题和最长公共子序列有相似之处,都是比较两个字符串之间的相似性,只是采用的标准不太相同。        先给出编辑距离的定义:设A和B是2个字符串,要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括:        (1)删除一个字符(delete);        (2)插

姚光超的专栏 1万+

【Android逆向工程】第17章:反调试与反 Hook 对抗技术

本文介绍了Android应用常见的反调试技术及其对抗策略。主要内容包括: 反调试技术概述 分类:进程检测(ptrace、TracerPid)、文件检测、行为检测(时间/断点)、内存检测、框架检测 对抗思路:识别检测点→Hook检测函数→修改返回值→隐藏工具特征 ptrace检测实现 原理:利用ptrace系统调用检测调试器附加 实现方式:直接检测、持续线程检测、fork子进程检测 绕过方法:Frida Hook ptrace函数返回0,或使用LD_PRELOAD注入假函数 综合防护 涉及多种检测技术的组合使

w987333120的博客 359

题解 | #计算字符串的编辑距离#

九八五硕,机械工程专业,正在准备秋招,打算先签高测,在青岛,据说双休,但是出差多,是电气工程师(plc),同时等华为的offer,但是对这个岗位了解的不多,有前。秋招走运拿了几个意向,一路走来,自己的努力没有白费,虽然没拿到bat,但转码选手已经知足了,就快要签三方了,还没拿定主意到底选哪个,麻烦牛友们给点意见,祝牛友们。请问各位大佬,腾讯的校招流程的每个环节是超过8天自动挂吗,国庆假好长,我还在等流程推进,太害怕了 #晒一晒我的offer# #腾讯# #字节# #华为#

华鑫的专栏 72

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【动态规划】不同路径,编辑距离题解及代码实现

蓝桥杯Dp,这是计划的一部分

qq_62839589的博客 1212

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

72. 编辑距离(Edit Distance)详细题解

设dfs(i, j)表示将s[0:i]转换为t[0:j]所需的最小操作数。题目方法时间复杂度空间复杂度交错字符串记忆化DFS / DPO(n·m)O(n·m)编辑距离记忆化DFS / DPO(n·m)

qq_17405059的博客 507

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

力扣72-编辑距离(Java详细题解)

编辑具体的最佳解决办法,快来看看吧。

2302_79761426的博客 1234

HJ52 计算字符串的编辑距离 题解

含义:dp[i][j]表示字符串s的0到i和字符串t的0到j的编辑距离,由于要求的是字符串s和t的编辑距离,所以答案存储在dp[s.size()][t.size()]中。

qwer456tyu123的博客 839

题解 | #计算字符串的编辑距离# 带滚动数组内存优化

大佬们,有没有谁知道华为制造部面试会问些什么问题,专业问题会不会很多,现场要不要做题,小弟现在很慌。这道题的滚动数组因为需要参考值,和背包等问题还蛮不一样的,记一下#include <iostr。二面领导面主要问什么呀,有没有手撕呢。

2301_79125431的博客 165

编辑距离 题解

题目 题目描述 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 例如将kitten一字转成sitting: 步骤1:sitten (k->s) 步骤2:sittin (e->i) 步骤3:sitting (->g) 所以kitten和sitting的编辑距离是3。俄罗斯科学家Vla...

中山市纪念中学冯越的博客 446

编辑距离题解

1. 使用动态规划请求,使用 dp[i][j] 来表示当前 word1 第 i 位置 和 word2 第 j 位置的最优解,由于计数是由从0计数,所以 dp[i][j] 表示的是 word1[i-1] 和 word2[j-1] 的位置。所以 dp 公式 为 min( dp[i-1][j] , dp[i][j-1] , dp[i-1][j-1] ) +1。+1 代表多做一次操作,dp[i-1][j] 代表 第一个情况,dp[i][j-1] 代表第二个情况。

lxh0113的博客 270

【题解】最短编辑距离

将n个字符的字符串a改成m个字符的字符串b最少需要几步, 每次操作有三种选择: 删除a的一个字符, 增加a的一个字符, 修改a的一个字符.怎么入手? 判断a和b的长度增删到一直后逐个判断a和b的字符是否相同然后依次修改a吗? 两个问题: 1.如何保证最终答案一定是最小值. 子问题就是如何保证每次插入或者删除的时候都是最优解? 2.代码及其繁琐, 且必然会超时.动态规划优化: 用数组f[i] [j]表示将a的前i个字符和b的前j个字符匹配所需的最小操作数. 我们考虑最后一步操作(假设前面都已经操作完, 第一步

jhgjhg225的博客 349

编辑距离问题 C++题解

内存限制: 128 MiB 时间限制: 1000 ms 标准输入输出 题目类型: 传统 评测方式: 文本比较。

xxy20110830的博客 647

【题解】编辑距离(DP)

题面 【题目描述】 设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括: (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。 求将字符串A变换为字符串B所用的最少字符操作数称为字符串A到B的编辑距离,记为d(A,B)。 【输入】 第1行是字符串A,第2行是字符串B。字符串A和B的长度均小于2000. 【输出】 一个正整数,为最少字符操...

_BOSS_的博客 665

[题解] P2758 编辑距离 线性DP

P2758 编辑距离 题解 洛谷题目链接 题目描述概括:A,B两个字符串,对A字符串进行删除/添加/修改字符操作,求A到B的最小操作次数 本题可以用线性DP来解决,设f[i][j]表示字符串A的前i个字符变为字符串B的前j个字符的最少操作次数,状态转移时一共有两种情况: 1.A[i]=B[j] 那么A的第i个字符和B的第j个字符正好对应,不需要修改,此时f[i][j]=f[i-1][j-1] if(s1[i-1]==s2[j-1])f[i][j]=f[i-1][j-1]; 2.A...

qq_46636543的博客 918
上一篇: 题解-青蛙的约会
下一篇: 题解-[HNOI2008]越狱
Cancelleds
博客等级 码龄8年 1110粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值