首页 > 其他分享 >最短编辑距离

最短编辑距离

时间:2024-09-08 18:03:40浏览次数:10  
标签:min int 字母 d% 距离 最短 编辑 操作 scanf


算法1

(线性DP) $O(n^2)$

1.状态定义

f[i][j] : 所有将a[1 ~ i] 变成 b[1 ~ j]的操作方式的操作次数的最小值

2.状态计算:

如何分类分类方式一般考虑的是最后一步

a的前i个字母,b的前j个字母,共有三种操作;

1.删除:a[1 到 i - 1] == b[1 到 j] ,删除 a[i] ,即方程为 f[i-1][j] + 1;

2.增加:a[1 到 i] == b[1 到 j - 1], 增加使a[i] = b[j]; ,即方程为 f[i][j-1] + 1;

3.更改操作:

这里我们可以再划分为不用修改的情况和修改的情况

 if(a[i] == b[j]) f[i][j] = min(f[i][j],f[i-1][j-1]);
 
 else f[i][j] = min(f[i][j], f[i-1][j-1] + 1);

,其中 +1 表示最后一步的操作;

3.边界情况

我们需要考虑两种情况

1.只能做增加操作:a的前0个字母与b的前1~j的字母进行匹配时

2.只能做删除操作:a的前1~j个字母与b的前0个字母进行匹配时

	for(int i = 1; i <= m; i++) f[0][i] = i;  //增加操作
	for(int i = 1; i <= n; i++) f[i][0] = i;  //删除操作

C++ 代码

#include <bits/stdc++.h>
using namespace std;

const int N = 1010;

int n,m;
char a[N],b[N];
int f[N][N];  //f[i][j] 表示n的前i个字母变成b的前j个字母的操作次数的最小值

int main() {
	scanf("%d%s",&n,a + 1);
	scanf("%d%s",&m,b + 1);

	//处理边界情况
	for(int i = 1; i <= m; i++) f[0][i] = i;  //增加操作
	for(int i = 1; i <= n; i++) f[i][0] = i;  //删除操作

	for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= m; j++) {
			f[i][j] = min(f[i-1][j] + 1,f[i][j-1] + 1);  //删除操作和增加操作中选择最小值
			if(a[i] == b[j]) // 如果最后一个字母相等
				f[i][j] = min(f[i][j],f[i-1][j-1]);
			else
				f[i][j] = min(f[i][j],f[i-1][j-1] + 1);
		}
	}
	printf("%d",f[n][m]);
	return 0;

}

标签:min,int,字母,d%,距离,最短,编辑,操作,scanf
From: https://www.cnblogs.com/ltphy-/p/18403189

相关文章

  • AE 2024安装包下载与安装:为专业视频编辑师打造的指南
    AE2024安装包下载与安装:为专业视频编辑师打造的指南AdobeAfterEffects(简称AE)是一款广泛应用于电影、电视、广告和网络视频制作的专业视频合成和特效软件。随着技术的不断进步,Adobe公司定期发布新版本,以满足不断变化的市场需求和用户期望。AE2024作为最新版本,带来了许多令人兴奋......
  • 信息学奥赛初赛天天练-86-NOIP2014普及组-基础题5-球盒问题、枚举算法、单源最短路、D
    1NOIP2014普及组基础题521把M个同样的球放到N个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的放置方法?(用K表示)()例如,M=7,N=3时,K=8;在这里认为(5,1,1)和(1,5,1)是同一种放置方法。问:M=8,N=5时,K=()22如图所示,图中每条边上的数字表示该边的长度,则从......
  • 信息学奥赛初赛天天练-86-NOIP2014普及组-基础题5-球盒问题、枚举算法、单源最短路、D
    信息学奥赛初赛天天练-86-NOIP2014普及组-基础题5-球盒问题、枚举算法、单源最短路、Dijkstra算法、Bellman-Ford算法PDF文档公众号回复关键字:202409081NOIP2014普及组基础题521把M个同样的球放到N个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的放置方法?(......
  • 最短路
    Bellman-Ford这是一种暴力求解单源最短路的方法。如果图不存在负环,那么任意两点之间的最短路一定不经过相同的点。假设\(A\)到\(E\)的最短路径为\(A\toB\toC\toD\toE\),那么\(A\toB\toC\toD\)一定为\(A\)到\(C\)的最短路。记\(dis_{x}\)表示起点\(s......
  • 富文本编辑器 实现CTRL+V粘贴图片并上传、WORD粘贴带图片
    编辑器:百度ueditor前端:vue2,vue3,vue-cli,html5需求:复制粘贴word内容图片,word图片转存交互要求:开源,免费,技术支持用户体验:Ctrl+V快捷键操作该说不说,最近这块应该也是挻火的,今天早上又有网友加我微信私聊,说是想了解一下这块的技术和方案。实际我的微信号之前就已经在网上......
  • 芝士AI(paperzz)写作助手:智能文章创作与编辑,一站式论文查重降重
    写一篇论文是一个复杂的过程,涉及多个步骤,包括选题、研究、撰写、编辑和校对。好不容易论文完成了,还要准备答辩PPT,这对于没有思路或者容易紧张的同学们说又是一大难题。说到这里,就不得不说到AI了。芝士AI(paperzz)写作助手:智能文章创作与编辑,一站式论文查重降重。不仅能提高写......
  • 一款优秀的文本编辑器:EmEditor Pro
    EmEditor文本编辑器是一款功能强大且非常好用的文本编辑器!它启动速度快,可以完全代替Windows自带的记事本,足以胜任日常的文本编辑工作。良好地支持Unicode和中文字符,还支持20多种编程语言的语法突出显示。并且支持的语法种类可以不断的扩充。具有选择文本列块的功能(按ALT键拖......
  • Linux中的Vim文本编辑器
    Linux中的Vim是一个非常强大的文本编辑器,它提供了丰富的命令来支持各种文本编辑操作。以下是一个Vim常用命令的详细总结,涵盖了基本操作、编辑命令、移动光标、查找替换、保存退出等多个方面。一、基本操作启动Vimvim:直接启动Vim编辑器。vimfilename:打开或创建文件并启......
  • 72. 编辑距离算法实现详解
    LeetCode72.编辑距离详解一、题目描述给你两个单词word1和word2,请返回将word1转换成word2所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符。删除一个字符。替换一个字符。示例1:输入:word1="horse",word2="ros"输出:3解释:horse......
  • pbootcms网站后台编辑器加载不出来怎么办?
    设你使用的是Notepad++或VSCode编辑器,具体步骤如下:打开文件:使用FTP客户端连接到服务器。找到文件 foot.html 并下载到本地。删除JS脚本引用:打开 foot.html 文件。找到第12行的JS脚本引用:删除这一行。保存文件:保存修改后的 foot.html 文件。上传文件......