当前位置: 首页 > news >正文

P2758 编辑距离

题目链接:

动态规划的思路:

1、状态定义:题目要求A==>B的最少操作次数,我们用二维数组 dp[i][j] 来表示 A 的前 i 个字母转换为 B 的前 J 个字母需要的最少操作次数。
2、状态转移:这里有两种情况,当 A[i] == B[j] 的时候,我们直接用前面的状态 dp[i-1][j-1]。当 A[i] != B[j] 的时候,①将 A[i] 改写成 B[j] , dp[i][j] = dp[i-1][j-1]+1; ②将B末尾 B[j] 插入到 A 末尾A[i],dp[i][j] = dp[i][j+1]+1;③ 将 A末尾 A[i] 删除,dp[i][j] = dp[i-1][j]+1。
3、初始化:①当 B为空字符串时, dp[i][0] = i,表示将 A 的前 i 个字符全部删除,需要 i 次操作。②当 A 为空字符串时, dp[0][i] = i, 表示需要插入 j 次字符,才能使得字符串 A 等于字符串 B。
4、答案: dp[A的字符串长度][B的字符串长度];

线性DP代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 2020;

string s1, s2;
int dp[N][N];

int main(){
    cin >> s1 >> s2;
    //避免状态转移的时候出现负数下标
    s1 = " " + s1;
    s2 = " " + s2;
    //长度
    int n1 = s1.size(), n2 = s2.size();
    //题目要我们求最少的操作次数 将dp数组答案初始化N
    for(int i = 1;i < n1; i++){
        for(int j =1;j <= n2; j++){
            dp[i][j] = N;
        }
    }
    //dp数组初始化状态
    for(int i = 1; i < n1; i++){
        dp[i][0] = i;
    }
    for(int i = 1; i < n2; i++){
        dp[0][i] = i;
    }
    //状态转移
    for(int i = 1;i  < n1; i++){
        for(int j = 1; j < n2; j++){
            if(s1[i] == s2[j]){
                dp[i][j] = dp[i-1][j-1];
            }
            else{
                dp[i][j]=min({dp[i-1][j-1]+1, dp[i-1][j]+1, dp[i][j-1]+1});
            }
        }
    }
    cout << dp[n1-1][n2-1] << endl;
    return 0;
}

http://www.dtcms.com/a/109360.html

相关文章:

  • 08_paho.mqtt.cpp库使用示例
  • Python学习笔记(8)关于列表内置函数和多维列表
  • Java 常用数据结构详解
  • Java8 到 Java21 系列之 Stream API:数据处理的新方式(Java 8)
  • Node.js 安装与配置全攻略:从入门到高效开发
  • 做题记录:和为K的子数组
  • 二极管正负极区分
  • Mermaid 语法教程
  • kali中vmtools失效用不了解决方法
  • Leetcode 857 -- 贪心 | 数学
  • 【C语言】整数和浮点数在内存中的存储
  • 使用pkexec 和其策略文件安全提权执行外部程序
  • linux文件上传下载lrzsz
  • LangChain核心解析:掌握AI开发的“链“式思维
  • 【KMP】P4391 [BalticOI 2009] Radio Transmission 无线传输|普及+
  • 蜜蜡是什么?蜜蜡与琥珀的区别以及蜜蜡的收藏价值一览
  • 《AI大模型应知应会100篇》第57篇:LlamaIndex使用指南:构建高效知识库
  • 一篇关于Netty相关的梳理总结
  • 修复SSL证书链不完整问题certificate verify failed unable to get local issuer certificate
  • Java学习总结-io缓冲流
  • [MySQL初阶]MySQL表的操作
  • 【服务日志链路追踪】
  • C语言--回文字符串
  • Spark中排序--前缀排序prefixSort
  • 【人工智能之大模型】在Transformer中,同一个词可以有不同的注意力权重嘛?为什么
  • 鸿蒙NEXT开发缓存工具类(ArkTs)
  • 华为云 云化数据中心 CloudDC | 架构分析与应用场景
  • Java学习总结-Flie-IO流
  • 解决Ubuntu文件夹锁标记
  • 【youcans论文精读】弱监督深度检测网络(Weakly Supervised Deep Detection Networks)