码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 最小编辑距离-动态规划


    题目

    设A和B是2个字符串。要用最少的字符操作将字符串 A 转换为字符串 B 。
    字符操作包括
    (1) 删除一个字符;
    (2)插入一个字符;
    (3)将一个字符改为另一个字符。
    将字符串 A 变换为字符串 B 所用的最少字符操作数称为字符串 A 到 B 的编辑距离,记为d(A, B)。
    试设计一个有效算法,对任给的2个字符串 A 和 B ,计算出它们的编辑距离d(A, B)。

    分析

    题目要求计算两字符串的编辑距离,可以采用动态规划算法求解,由最优子结构性质可建立递归关系如下:
    其中数组d[i][j]存储长度分别为 i、 j 的两字符串的编辑距离;
    用 edit 标记所比较的字符是否相同,相同为0,不同为1;
    用 m、n 存储字符串 a、b 的长度。

    代码设计

    a.函数min()找出三个数中的最小值;
    b.函数f()计算两字符串的编辑距离:
    ①用 edit 标记所比较的字符是否相同,相同为0,不同为1;
    ②分别用m、n存储字符串a、b的长度,用数组d[i][j]存储长度分别为 i. j 的两字符串的编辑距离,问题的最优值记录于d[n] [m]中;
    ③利用递归式写出计算d[i][j]的递归算法。

    注意

    d[][]的左,上边沿 初始化为1,字符串的字母比较存储从d[1][1]开始,这样才保证递推的正确性.

    AC代码

    #include
    #include
    #define N 9999
    using namespace std;
    string a,b;
    int m,n;
    int d[N][N];
    int min(int a,int b,int c) { //返回a b c中的最小值
    	int x=a<b?a:b;
    	return x<c?x:c;
    }
    void solve() {
    	int m=a.length();//获得字符串长度
    	int n=b.length();
    	for(int i=1; i<=m; i++) //初始化
    		d[i][0]=i;
    	for(int j=1; j<=n; j++)
    		d[0][j]=j;
    	for(int i=1; i<=m; i++) {
    		for(int j=1; j<=n; j++) {
    			int edit=a[i-1]==b[j-1]?0:1;//如果相等就为0,不相等就是1 
    			d[i][j]=min(d[i-1][j-1]+edit,d[i][j-1]+1,d[i-1][j]+1);
    		}
    	}
    	cout<<d[m][n]<<"\n";
    }
    int main() {
    	cin>>a>>b;
    	solve();
    }```
    
    
    
    
  • 相关阅读:
    JVM调优参数
    Mac电脑清理软件有哪些 MacBooster和CleanMyMac哪个好用 苹果电脑清理垃圾软件推荐 cleanmymac和柠檬清理
    java中mysql5和mysql8数据库连接方式
    将图像裁成6等分
    HTML人物介绍、个人设计web前端大作业、贝聿铭人物介绍(带报告3000字)
    论文学习——降雨场次划分方法对降雨控制率的影响分析
    Android Studio Gradle插件版本与Gradle 版本对应关系
    【华为机试真题 JAVA】字符统计及重排-100
    不习惯的 Vue3 起步五 のapiHooks 封装
    Sectigo https证书
  • 原文地址:https://blog.csdn.net/qq_51219814/article/details/126958919
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号