题面

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

我们设 \(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. 干货!手把手教你使用数据可视化BI软件创建企业变更流程监控大屏

    灯果数据可视化BI软件是新一代人工智能数据可视化大屏软件,内置丰富的大屏模板,可视化编辑操作,无需任何经验就可以创建属于你自己的大屏.大家可以在他们的官网下载软件.   本文以企业变更流程监控大屏为例 ...

  2. 01、Git安装教程(windows)

    首先如下图:(点击next) 第二步:文件位置存储,可根据自己盘的情况安装 第三步:安装配置文件,自己需要的都选上,下一步 第四步:不创建启动文件夹,下一步: 第五步:选择默认的编辑器,我们直接用推荐 ...

  3. Sunset: dusk: Vulnhub Walkthrough

    靶机链接: https://www.vulnhub.com/entry/sunset-dusk,404/ 主机IP扫描: IP端口扫描: 21 端口  pyftpdlib 1.5.5 版本漏洞 25 ...

  4. 1.4掌握日志工具的使用——Android第一行代码(第二版)笔记

    Android中的日志工具类是Log(android.util.Log),这个类中提供了如下5个方法来供我们打印日志. Log.v():用于打印那些最为琐碎的.意义最小的日志信息.对应级别verbos ...

  5. Foxmail for windows 客户端设置和 IMAP、POP3/SMTP 的设置

    Foxmail支持微信扫码.手机验证码.账号密码三种方式新建腾讯企业邮箱. 注意:目前仅foxmail 7.2.11版本支持微信扫码和手机验证码新建腾讯企业邮箱,可以foxmail官网https:// ...

  6. vue.config.js添加路径别名

    在组件库中添加配置文件后其它文件需要引用它,此时想到利用路径的别名比较方便,相当于缩写了,请看下面的添加过程: (一)在vue.config.js文件中添加的内容如粗体字体所示: const path ...

  7. C. Long Beautiful Integer

    题目思路还是很直接,首先按要求生成字符串.如果该目标字符串小于原字符串,那么从第k位开始,找到最后一个非9的位置,++,同时如果有9,要考虑进位(一开始没有考虑WA了一次). 犯了一个错误,就是比较字 ...

  8. 【笔记】机器学习 - 李宏毅 - 3 - Bias & Variance

    A more complex model does not always lead to better performance on testing data. Because error due t ...

  9. malloc分配内存的结构

    在C/C++,我们都可以使用malloc进行分配大小,单位是字节.   malloc实际分配的内存大小和传入的参数其实是不同的.   实际分配的内存大小>传入的参数大小. malloc分配的内存 ...

  10. windows系统安装部署python3.5和python2.7双解释器并存

    前提材料准备: 下载对应版本的安装包:下载地址:https://www.python.org/downloads/windows/ python3.8.x安装包下载: python2.7.x安装包下载 ...