AcWing 902. 最短编辑距离(线性DP)
题目链接
https://www.acwing.com/problem/content/description/904/
思路
因为题目中有三种操作A字符串的方法:
- 删除A中一个元素
- 给A增加任意元素
- 将A中任意位置替换成某个元素
我们定义f[i][j]f[i][j]f[i][j]表示的是字符串A从[1,i][1,i][1,i]和字符串B[1,j][1,j][1,j]完成匹配需要的最少操作次数,那么我们考虑最A字符串的最后一个位置的操作情况
- 如果A最后一个位置是删除操作,说明从A字符串中[1,i−1][1,i-1][1,i−1]的部分和B字符串中[1,j][1,j][1,j]的部分匹配的最小值转移过来,即f[i][j]=f[i−1][j]+1f[i][j] = f[i-1][j]+1f[i][j]=f[i−1][j]+1
- 如果A最后一个位置是删除操作,说明从A字符串中[1,i][1,i][1,i]的部分和B字符串中[1,j−1][1,j-1][1,j−1]的部分匹配的最小值转移过来,即f[i][j]=f[i][j−1]+1f[i][j] = f[i][j-1]+1f[i][j]=f[i][j−1]+1
- 如果A最后一个位置是替换操作,说明A字符串中[1,i−1][1,i-1][1,i−1]的部分和B字符串中[1,j−1][1,j-1][1,j−1]的部分匹配的最小值转移过来,此时我们需要判断a[i]a[i]a[i]和b[j]b[j]b[j]是否相等,如果相等的话就直接转移否则则需要加上一个修改操作:f[i][j]=f[i−1][j−1]+1f[i][j]=f[i-1][j-1] + 1f[i][j]=f[i−1][j−1]+1(如果需要修改的话)
详情请看代码:
代码
#include<bits/stdc++.h>
using namespace std;const int N = 1000 + 10;
int n,m;
int f[N][N];char a[N],b[N];int main()
{cin>>n>>(a+1);cin>>m>>(b+1);for(int i = 0;i <= n; ++i) f[i][0] = i;for(int i = 0;i <= m; ++i) f[0][i] = i;for(int i = 1;i <= n; ++i) {for(int j = 1;j <= m; ++j){f[i][j] = min(f[i][j-1] + 1,f[i-1][j] + 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);}}cout<<f[n][m]<<endl;return 0;
}
AcWing 902. 最短编辑距离(线性DP)相关推荐
- 902. 最短编辑距离
最短编辑距离 #include <iostream> #include <algorithm> using namespace std; const int N = 1001; ...
- AcWing 1025. 开餐馆 (线性dp)
1025. 开餐馆 题意 信息学院的同学小明毕业之后打算创业开餐馆.现在共有 nnn 个地点可供选择. 小明打算从中选择合适的位置开设一些餐馆. 这 nnn 个地点排列在同一条直线上. 我们用一个整数 ...
- DP问题从入门到精通2.2(线性DP,最短编辑距离)
DP入门到精通系列 DP问题入门到精通1 DP问题入门到精通2.1 DP问题入门到精通3 DP问题入门到精通4 DP问题从入门到精通5 dp问题的难点到底是什么呢? 我认为是如何写出dp的更新方式,还 ...
- DP算法-背包问题与线性DP问题(Acwing)
目录 一.何为DP 二.背包问题 1.01背包问题 2.完全背包问题 3.多重背包问题 三.线性DP问题(典型例题与总结) 1.数字三角形问题 2.最长上升子序列 3.最长上升子序列Ⅱ 4.最长公共子 ...
- AcWing 1018. 最低通行费【动态规划】【线性DP】【数字三角形】
AcWing 1018. 最低通行费 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 1018. 最低通行费 二.题目分析 (一)算 ...
- 算法模板:动态规划之线性DP【沈七】
算法模板:动态规划之线性DP 前言 线性DP 数字三角形模型 摘花生 最小路径和 不同路径模型 不同路径(有障碍) 过河卒 (综合应用) 最长上升子序列模型 木棍加工 导弹拦截 完结散花 参考文献 前 ...
- 0x51.动态规划 - 线性DP(习题详解 × 10)
目录 0x51.动态规划 - 线性DP 0x51.1 LIS问题 Problem A. 登山 (最长下降子序列) Problem B. 友好城市(思维) Problem C. 最大上升子序列和 0x5 ...
- 最短编辑距离 python_最短编辑距离算法实现
一,算法介绍 在CS124课程的第一周提到 求解两个字符串相似度的算法---Minimum Edit Distance(最短编辑距离)算法.该算法在NLP(自然语言处理)中也会用到. 如何定义相似度呢 ...
- 动态规划最常见的习题 (最长公共子串、最长公共子序列、最短编辑距离)
(1)理论部分: (2)习题: 最长公共子串: 1 package month7.dp; 2 3 //https://www.nowcoder.com/questionTerminal/181a1a7 ...
最新文章
- 2022年,我该用JAX吗?GitHub 1.6万星,这个年轻的工具并不完美
- SQL语句中大于等于小于的写法
- fft快速傅利叶变的C实现
- C#中使用DTS来导入数据及相关问题
- php实现论坛系统,详解PHP论坛实现系统的思路
- 网页设计之字体和 CSS 调整
- 返利网app android版
- oracle数据库处于recover,oracle数据库recover和restore的区别
- 贺世界智能网联汽车大会-速锐得V8翻开智能驾驶汽车新篇章
- UE5 植被系统详解
- Windows获取系统唯一标识UUID
- Akka(二):使用Akka模拟yarn
- 聚焦运营商信创运维,美信时代监控易四大亮点值得一试!
- HALCON day1 C# 打开相机
- Java播放MP3播放音频
- 毕达哥拉斯素数的王伟猜想
- mc服务器语音,《我的世界》语音聊天Mod安装使用教程
- Google分布式系统三大论文(二)Bigtable: A Distributed Storage System for Structured Data
- 最新SWAPIDC本地后台登陆 – 替换包
- Virgo软件的介绍