题面

经典的最长公共子序列模型。

我们设 \(dp_{i,j}\) 表示 \(a_{1...i}\) 与 \(b_{1...j}\) 匹配上所需的最少操作数。

考虑删除操作,我们将 \(a_i\) 删除后 \(a_{1...i}\) 就与 \(b_{1...j}\) 匹配上了,说明原来 \(a_{1...i-1}\) 与 \(b_{1...j}\) 就是匹配上的,转移方程就是 \(dp_{i,j}=dp_{i-1,j}+1\)。

插入操作与删除操作同理,转移方程是 \(dp_{i,j}=dp_{i,j-1}+1\)。

考虑替换操作,

  • 如果 \(a_i=b_j\),则 \(dp_{i,j}=dp_{i-1,j-1}\)。
  • 如果 \(a_i\ne b_j\),则 \(dp_{i,j}=dp_{i-1,j-1}+1\)。

转移时这 \(3\) 种情况取 \(\min\) 即可。

边界条件: \(dp_{i,0}=i\),\(dp_{0,i}=i\)。

#include <bits/stdc++.h>

using namespace std;

int n, m, ans, dp[1003][1003];
char a[1003], b[1003]; int main()
{
scanf("%d%s", &n, a + 1);
scanf("%d%s", &m, b + 1);
for (int i = 1; i <= n; i+=1) dp[i][0] = i;
for (int i = 1; i <= m; i+=1) dp[0][i] = i;
for (int i = 1; i <= n; i+=1)
for (int j = 1; j <= m; j+=1)
{
dp[i][j] = min(dp[i][j - 1] + 1, dp[i - 1][j] + 1);
if (a[i] == b[j]) dp[i][j] = min(dp[i][j], dp[i - 1][j - 1]);
else dp[i][j] = min(dp[i][j], dp[i - 1][j - 1] + 1);
}
cout << dp[n][m] << endl;
return 0;
}

题解【AcWing902】最短编辑距离的更多相关文章

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

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

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

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

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

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

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

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

  5. leetCode题解寻找最短字符路径

    1.题目描述 2.分析 最简单的方案,对每一个字符,向两边寻找. 3.代码 vector<int> shortestToChar(string S, char C) { vector< ...

  6. acwing 902. 最短编辑距离

    地址 https://www.acwing.com/problem/content/904/ 给定两个字符串A和B,现在要将A经过若干操作变为B,可进行的操作有: 删除–将字符串A中的某个字符删除. ...

  7. 【CJOJ1644】【洛谷2758】编辑距离

    题面 题目描述 设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B.这里所说的字符操作共有三种: 1.删除一个字符: 2.插入一个字符: 3.将一个字符改为另一个字符: 皆为小 ...

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

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

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

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

随机推荐

  1. codewars--js--Find The Parity Outlier

    问题描述:(找出奇数数组中唯一的偶数,或是偶数数组中唯一的奇数) You are given an array (which will have a length of at least 3, but ...

  2. 硬件知识整理part4--0欧电阻在电路中的应用

    逝者如斯夫,不舍昼夜. --<论语子罕篇> 说起0欧电阻,必须先铺垫一下电路中的各种地. 先说一下,地是什么??地是参考0电位,所有电压都是参考地得出的,地的标准要一致,故各种地应短接在一 ...

  3. C++中static关键字的用法

    运行一个完整的程序.我们可将整个存储区分为四块: (1)栈区:就比如局部变量,对应的函数参数等这些,调用完之后相应的内存会自己释放掉,很让人省心. (2)堆区:堆来堆去的.得要人动手.所以得我们自己手 ...

  4. Vue整合d3.v5.js制作--柱状图(rect)

    先上效果图: 图中柱状图变成纯蓝色是鼠标滑动过的颜色(颜色可改,本人配色能力十分的强,建议直接用默认设置即可 ( ᖛ ̫ ᖛ )ʃ)) 1.环境说明 Vue版本:"vue": &q ...

  5. Hibernate(六)--缓存策略

    缓存: 缓存就是数据库数据在内存中的临时容器,包括数据库数据在内存中的临时拷贝,它位于数据库与数据库访问中间层,ORM在查询数据时,首先会根据自身的缓存管理策略,在缓存中查找相关数据,如果发现所需的数 ...

  6. C#设计模式学习笔记:(7)桥接模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7699301.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲结构型设计模式的第二个模式--桥 ...

  7. gcc 与g++

    which gcc     查看gcc           主要针对 .c which g++    查看g++            主要针对  .cpp yum install gcc  安装gc ...

  8. IDEA安装Flutter遇到的坑

    环境: ①IDEA2019.3.3 ②JAVA12 ③Android-SDK29.0.3 ④Flutter1.14.6 ⑤WINDOWS10.0.18363.657 ⑥AL10实体机,Android8 ...

  9. 吴裕雄--天生自然HADOOP操作实验学习笔记:hbase微博案例

    实验目的 熟悉hbase表格设计的方法 熟悉hbase的javaAPI 通过API理解掌握hbase的数据的逻辑视图 了解MVC的服务端设计方式 实验原理 上次我们已经初步设计了学生选课案例的,具体功 ...

  10. STM32 & RT-Thread的逆向入门

    STM32 & RT-Thread的逆向入门 backahasten@0xFA ​                现在,各种MCU的价格越来越低,同等条件下能买到的ROM和RAM资源也多了.对 ...