题目描述2988:计算字符串距离

对于两个不同的字符串,我们有一套操作方法来把他们变得相同,具体方法为:

  1. 修改一个字符(如把“a”替换为“b”)
  2. 删除一个字符(如把“traveling”变为“travelng”)
    比如对于“abcdefg”和“abcdef”两个字符串来说,我们认为可以通过增加/减少一个“g”的方式来达到目的。无论增加还是减少“g”,我们都仅仅需要一次操作。我们把这个操作所需要的次数定义为两个字符串的距离。
    给定任意两个字符串,写出一个算法来计算出他们的距离。
    输入
    第一行有一个整数n。表示测试数据的组数,
    接下来共n行,每行两个字符串,用空格隔开。表示要计算距离的两个字符串
    字符串长度不超过1000。
    输出
    针对每一组测试数据输出一个整数,值为两个字符串的距离。

解析

使用dp转移:

if(a[i]==b[j]) dp[i][j]=dp[i-1][j-1];
else{dp[i][j]=min(dp[i-1][j-1](修改),min(dp[i-1][j](删前),dp[i][j-1](删后)))+1;
}

就完事啦

问题

然而…
又出了一堆bug
勿忘国耻

1.定义

一开始又草率了qwq
这题不能用最长公共子序列!
其实很显然
但想dp的时候就是看不到
第n次了
dp一定要谨慎!!

2.初始化

少了一行很关键的东西

for(int i=1;i<=max(l1,l2);i++) dp[i][0]=dp[0][i]=i;

实际意义也很显然
所以dp的初始化也是要重视的
很多时候不止是赋个dp[0][0]=0这么简单

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=2e3+100;
int n,m;
char a[N],b[N];
int dp[N][N],l1,l2;
int main(){scanf("%d",&n);for(int k=1;k<=n;k++){scanf(" %s",a+1);scanf(" %s",b+1);l1=strlen(a+1);l2=strlen(b+1);//cout<<a+1;dp[0][0]=0;for(int i=1;i<=max(l1,l2);i++) dp[i][0]=dp[0][i]=i;
//      int m=max(l1,l2);for(int i=1;i<=l1;i++){for(int j=1;j<=l2;j++){if(a[i]==b[j]) dp[i][j]=dp[i-1][j-1];else{dp[i][j]=min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1]))+1;}
//              printf("i=%d j=%d dp=%d\n",i,j,dp[i][j]);}}printf("%d\n",dp[l1][l2]);}return 0;
}
/*
3
abcdefg  abcdef
ab ab
mnklj jlknm
*/

字符串距离(opj )(动态规划)相关推荐

  1. 洛谷P1279 字串距离 (动态规划)

    题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为"abcbcd",则字符串"abcb□cd"," ...

  2. 机器学习中的度量——字符串距离

    机器学习是时下流行AI技术中一个很重要的方向,无论是有监督学习还是无监督学习都使用各种"度量"来得到不同样本数据的差异度或者不同样本数据的相似度.良好的"度量" ...

  3. Bailian4007 计算字符串距离【DP】

    4007:计算字符串距离 总时间限制: 1000ms 内存限制: 65536kB 描述 对于两个不同的字符串,我们有一套操作方法来把他们变得相同,具体方法为: 修改一个字符(如把"a&quo ...

  4. 笔试 | 东方财富 2020 春季校园招聘后端开发在线笔试【Python】【C++】【字符串】【动态规划】

    东方财富 2020 春季校园招聘后端开发在线笔试[Python][C++][字符串][动态规划] 一.单选题 一共有 256 个结点的二叉树高度最小是多少:8. 读程题,选出正确的程序输出结果. 不记 ...

  5. 华为机试HJ52:计算字符串的距离(动态规划)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个 ...

  6. 种草莓【字符串】【动态规划】

    http://acm.hnust.edu.cn/JudgeOnline/problem.php?cid=1436&pid=6 求最大正方形边长. 采用动态规划思想,若当前格满足要求,则dp[i ...

  7. 计算字符串距离(信息学奥赛一本通-T1298)

    [题目描述] 对于两个不同的字符串,我们有一套操作方法来把他们变得相同,具体方法为: 修改一个字符(如把"a"替换为"b"); 删除一个字符(如把"t ...

  8. 字符串上的动态规划算法--------单字符串的情况

    禁止字符串 考虑只由'A','G','C','T'四种字符组成的DNA字符串.给定一个长度为 k的字符串 S.请计算长度恰好为 n且不包含S的字符串的个数.输出个数mod 10009后的结果. 首先, ...

  9. 字符串上的动态规划算法--------多字符串的情况

    DNA Repair 考虑只由'A','G','C','T'四种字符组成的 DNA字符串.给定一个原字符串 S,和 n个禁止模式字符串 p1,p2,..,pn.请修改字符串 S,使得其中不包含任何禁止 ...

最新文章

  1. IIS7 配置PHP服务器
  2. Spring+SpringMVC+Mybatis整合
  3. 找回 macOS Sierra 中的“任何来源”选项
  4. Forerunner:首个面向“多未来”的推测执行技术
  5. keystone同步数据之后不报错,查看日志有错误,进入MySQL没有如何数据解决方法
  6. CV之路——opencv基本操作
  7. java 管道设计_使用管道流实现Java 8阶段构建器
  8. poj1426(dfs)
  9. boost::phoenix::bind相关的测试程序
  10. Hybris Commerce Product字段名列表
  11. yum第三方安装-软件包没签名及更新错误
  12. PHP和MySQL Web开发pdf
  13. 公文字体字号标准2020_手把手教你写公文——红头文件的制作技巧
  14. 团队作业——Alpha冲刺之事后诸葛亮
  15. 数学建模——层次分析法
  16. IllegalStateException: Cannot find current proxy: Set 'exposeProxy' property on Advised to 'true'
  17. autojs编写的支付宝支付模板,带toast弹窗,自定义控件,界面上插入图片,功能非常强大和完善值得学习
  18. 虚拟机VMware安装XP系统错误解决办法
  19. JDK1.8版本linux、Windows64下载
  20. excel 统计函数笔记

热门文章

  1. 《SAS编程与数据挖掘商业案例》学习笔记之四
  2. java后台传一个对象到前台_前台判断对象中的一个布尔值_springMVC面试题
  3. 指定的文件不是虚拟磁盘 没有快照_vmware workstaiton 15 虚拟机克隆(4)
  4. java符号%3e%3e是什么意思,终于找到了!有了它你就可以读懂字节码了!
  5. java输入数据插入if_java编程,从键盘录入10个整数数据,将每次录入的数据按从小到大的顺序插入到数组中。...
  6. 件工程项目开发最全文档模板_一文带你了解微信小程序社区和小程序开发
  7. cefsharp49显示html,CefSharp-cefshar
  8. php文字左右滚动代码,JavaScript
  9. python数据分析与展示 pdf课件_python数据分析与展示 课件 相关实例(示例源码)下载 - 好例子网...
  10. php多进程 写入文件_PHP多进程中使用file_put_contents安全吗?