地址 https://www.acwing.com/problem/content/904/

给定两个字符串A和B,现在要将A经过若干操作变为B,可进行的操作有:

  1. 删除–将字符串A中的某个字符删除。
  2. 插入–在字符串A的某个位置插入某个字符。
  3. 替换–将字符串A中的某个字符替换为另一个字符。

现在请你求出,将A变为B至少需要进行多少次操作。

输入格式

第一行包含整数n,表示字符串A的长度。

第二行包含一个长度为n的字符串A。

第三行包含整数m,表示字符串B的长度。

第四行包含一个长度为m的字符串B。

字符串中均只包含大写字母。

输出格式

输出一个整数,表示最少操作次数。

数据范围

1≤n,m≤1000

输入样例:

AGTCTGACGC

AGTAAGTAGGC
输出样例:

解法

动态规划

f[i][j] 表示 a[1-i]变化到b[1-j]最小的变化次数

那么首先最容易得到的变化次数就是

a长度=i  b长度=0

a长度=0 b长度=0

f[0][j] 若b为j长度 a为0 则a需要增加j次才能变成b
f[i][0] 若a为i长度 b为0 则a需要删除i次才能编程b

接下来进行分析各种情况

a=i b=j

1 若 a需要删除最后的字母才能变成b 那么就有了 a[1~i-1] == b[1-j] 的前提

2 若 a需要最后增加一个字母才能变成b 那么就有了 a[1-i] == b[1-j+1] 的前提

3 若 a需要改动最后一个字母才能变成b 那么就有了 a[1-i-1] == b[1-j-1] 的前提

第3种情况中 若 a[i] == b[j] 则 此时的最小操作数就可能等于 dp[i-1][j-1]的操作数

代码流程就是

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

全部代码如下

#include <iostream>

using namespace std;

const int N = ;
int n,m;
char a[N],b[N];
int f[N][N]; //f[i][j] 表示 a[1-i]变化到b[1-j]最小的变化次数 int main()
{
scanf("%d%s",&n,a+);
scanf("%d%s",&m,b+); //首先初始化 f[i][0] f[j][0]
//f[0][j] 若b为j长度 a为0 则a需要增加j次才能变成b
//f[i][0] 若a为i长度 b为0 则a需要删除i次才能编程b
for(int i =;i <= n;i++) f[i][] = i;
for(int i = ; i <= m;i++) f[][i] = i; for(int i =;i <= n;i++){
for(int j = ;j <=m;j++){
f[i][j] = min(f[i-][j]+,f[i][j-]+);
if(a[i] == b[j]) f[i][j] = min(f[i][j],f[i-][j-]);
else f[i][j] = min(f[i][j],f[i-][j-]+);
}
} cout << f[n][m] << endl; return ;
}

acwing 902. 最短编辑距离的更多相关文章

  1. POJ_3356——最短编辑距离,动态规划

    Description Let x and y be two strings over some finite alphabet A. We would like to transform x int ...

  2. AcWing 91. 最短Hamilton路径

    今天第一次在\(AcWing\)这个网站上做题,来发一下此网站的第一篇题解 传送门 思路 直接枚举的话时间复杂度为\(O(n*n!)\) 复杂度显然爆炸,所以我们用二进制枚举,这样就可以把复杂度降到\ ...

  3. (5千字)由浅入深讲解动态规划(JS版)-钢条切割,最大公共子序列,最短编辑距离

    斐波拉契数列 首先我们来看看斐波拉契数列,这是一个大家都很熟悉的数列: // f = [1, 1, 2, 3, 5, 8] f(1) = 1; f(2) = 1; f(n) = f(n-1) + f( ...

  4. [LeetCode] 72. Edit Distance(最短编辑距离)

    传送门 Description Given two words word1 and word2, find the minimum number of steps required to conver ...

  5. AcWing 1140. 最短网络

    农夫约翰被选为他们镇的镇长! 他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场. 约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场. 约翰的农场的编号是1,其他农场 ...

  6. POJ 3356(最短编辑距离问题)

    POJ - 3356 AGTC Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Desc ...

  7. 题解【AcWing902】最短编辑距离

    题面 经典的最长公共子序列模型. 我们设 \(dp_{i,j}\) 表示 \(a_{1...i}\) 与 \(b_{1...j}\) 匹配上所需的最少操作数. 考虑删除操作,我们将 \(a_i\) 删 ...

  8. stanford NLP学习笔记3:最小编辑距离(Minimum Edit Distance)

    I. 最小编辑距离的定义 最小编辑距离旨在定义两个字符串之间的相似度(word similarity).定义相似度可以用于拼写纠错,计算生物学上的序列比对,机器翻译,信息提取,语音识别等. 编辑距离就 ...

  9. 编辑距离算法详解:Levenshtein Distance算法

    算法基本原理:假设我们可以使用d[ i , j ]个步骤(可以使用一个二维数组保存这个值),表示将串s[ 1…i ] 转换为 串t [ 1…j ]所需要的最少步骤个数,那么,在最基本的情况下,即在i等 ...

随机推荐

  1. NET Framework项目移植到NET Core上遇到的一系列坑

    原文:NET Framework项目移植到NET Core上遇到的一系列坑 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...

  2. 收藏收藏:工作用了很久的自主开发的Sql Server代码生成器,我开源了(.NET Winform)

    大家好,已经一年没见了,我的技术已经有了惊人的进步.于是乎就来为大家分享技术了,今天呢为大家带来的是很早之前开发的老工具分享给大家. 相信大家都使用过代码生成器,用起来顺手的有多少?根据自己的业务配置 ...

  3. Leetcode 之 Mysql(day01)

    大四已经接近一半了,下学期就要准备找工作实习了.为了自己能找到一份比较满意的实习,今天开始要刷一下题目.今天就刷 MySQL 语言.以下就是我今天刷的题目.大家也可以去 leetcode 注册一个账号 ...

  4. Java EE 基本开发流程及数据库连接池 Druid

    一. 公司开发基本流程    a. 了解需求信息(比较模糊)        需求,不是别人告诉你的,是你自己挖掘出来的.        售前工程师(对行业知识了解):编程学不好,但懂点代码,对人的综合 ...

  5. VC遍历访问目录下的文件

    访问目录文件夹下的文件是经常需要的操作,C/C++和win32接口都没有提供直接调用的函数.在这里总结了几个经常用到的函数,通过MFC的CFileFind函数递归遍历实现,包括以下几个功能函数: 查找 ...

  6. iPhone 启动页尺寸

    iPhone 启动页尺寸 4 640*960 5 640*1136 6 750*1334 6p 1242*2208

  7. 知识图谱基础之RDF,RDFS与OWL 2

    https://zhuanlan.zhihu.com/p/32122644 看过之前两篇文章([1](为什么需要知识图谱?什么是知识图谱?——KG的前世今生), [2](语义网络,语义网,链接数据和知 ...

  8. 1、nio说明 和 对比bio

    nio和bio的区别 bio: 面向流的. 单向的. 阻塞的,这也是b这个的由来. nio: 面向块的.(buffer) 双向的. 非阻塞的.同步的编程方式.是一种select模型 nio编程的常规步 ...

  9. Appium新版本遇到的问题,不能通过 name 去定位元素抛 Message: Locator Strategy 'name' is not supported for this session

    环境: 1.Appium: 1.15.1 2.Python: 3.7.0 3.Selenium: 3.141.0 4.IDE: Pycharm 5.PC:Windows 10 问题:在 Pycharm ...

  10. MyBatis的ResultMapping和ResultMap

    MyBatis的ResultMapping和ResultMap Effective java 第3版中描述的Builder模式 Java设计模式14:建造者模式 2个类都使用了Builder来构建对象 ...