题目链接

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)相关推荐

  1. 902. 最短编辑距离

    最短编辑距离 #include <iostream> #include <algorithm> using namespace std; const int N = 1001; ...

  2. AcWing 1025. 开餐馆 (线性dp)

    1025. 开餐馆 题意 信息学院的同学小明毕业之后打算创业开餐馆.现在共有 nnn 个地点可供选择. 小明打算从中选择合适的位置开设一些餐馆. 这 nnn 个地点排列在同一条直线上. 我们用一个整数 ...

  3. DP问题从入门到精通2.2(线性DP,最短编辑距离)

    DP入门到精通系列 DP问题入门到精通1 DP问题入门到精通2.1 DP问题入门到精通3 DP问题入门到精通4 DP问题从入门到精通5 dp问题的难点到底是什么呢? 我认为是如何写出dp的更新方式,还 ...

  4. DP算法-背包问题与线性DP问题(Acwing)

    目录 一.何为DP 二.背包问题 1.01背包问题 2.完全背包问题 3.多重背包问题 三.线性DP问题(典型例题与总结) 1.数字三角形问题 2.最长上升子序列 3.最长上升子序列Ⅱ 4.最长公共子 ...

  5. AcWing 1018. 最低通行费【动态规划】【线性DP】【数字三角形】

    AcWing 1018. 最低通行费 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 1018. 最低通行费 二.题目分析 (一)算 ...

  6. 算法模板:动态规划之线性DP【沈七】

    算法模板:动态规划之线性DP 前言 线性DP 数字三角形模型 摘花生 最小路径和 不同路径模型 不同路径(有障碍) 过河卒 (综合应用) 最长上升子序列模型 木棍加工 导弹拦截 完结散花 参考文献 前 ...

  7. 0x51.动态规划 - 线性DP(习题详解 × 10)

    目录 0x51.动态规划 - 线性DP 0x51.1 LIS问题 Problem A. 登山 (最长下降子序列) Problem B. 友好城市(思维) Problem C. 最大上升子序列和 0x5 ...

  8. 最短编辑距离 python_最短编辑距离算法实现

    一,算法介绍 在CS124课程的第一周提到 求解两个字符串相似度的算法---Minimum Edit Distance(最短编辑距离)算法.该算法在NLP(自然语言处理)中也会用到. 如何定义相似度呢 ...

  9. 动态规划最常见的习题 (最长公共子串、最长公共子序列、最短编辑距离)

    (1)理论部分: (2)习题: 最长公共子串: 1 package month7.dp; 2 3 //https://www.nowcoder.com/questionTerminal/181a1a7 ...

最新文章

  1. 2022年,我该用JAX吗?GitHub 1.6万星,这个年轻的工具并不完美
  2. SQL语句中大于等于小于的写法
  3. fft快速傅利叶变的C实现
  4. C#中使用DTS来导入数据及相关问题
  5. php实现论坛系统,详解PHP论坛实现系统的思路
  6. 网页设计之字体和 CSS 调整
  7. 返利网app android版
  8. oracle数据库处于recover,oracle数据库recover和restore的区别
  9. 贺世界智能网联汽车大会-速锐得V8翻开智能驾驶汽车新篇章
  10. UE5 植被系统详解
  11. Windows获取系统唯一标识UUID
  12. Akka(二):使用Akka模拟yarn
  13. 聚焦运营商信创运维,美信时代监控易四大亮点值得一试!
  14. HALCON day1 C# 打开相机
  15. Java播放MP3播放音频
  16. 毕达哥拉斯素数的王伟猜想
  17. mc服务器语音,《我的世界》语音聊天Mod安装使用教程
  18. Google分布式系统三大论文(二)Bigtable: A Distributed Storage System for Structured Data
  19. 最新SWAPIDC本地后台登陆 – 替换包
  20. Virgo软件的介绍

热门文章

  1. Dell Alienware 13 R3 win10 安装 ubuntu 18.04 总结
  2. 卷积神经网络发展简史
  3. CSS 布局Float 【3】
  4. 57-Insert Interval
  5. effective java第45条:将局部变量的作用域最小化
  6. POJ3169 Layout(差分约束)
  7. tcpdump + mk-query-digest 分析mysql
  8. Autofs实现文件系统的自动mount
  9. [TCO2013]TrickyInequality
  10. Web项目(四)————异步队列的实现