博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
edit
阅读量:5330 次
发布时间:2019-06-14

本文共 1237 字,大约阅读时间需要 4 分钟。

 试题编号:1119    
ZYC编辑距离F920
难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述
设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:

1、删除一个字符;

2、插入一个字符;

3、将一个字符改为另一个字符。 

对任的两个字符串A和B,计算出将字符串A变换为字符串B所用的最少字符操作次数。

输入
第一行为字符串A;第二行为字符串B;字符串A和B的长度均小于2000。
输出
只有一个正整数,为最少字符操作次数。
输入示例
sfdqxbw
gfdgw
输出示例
4

今天又考试了QAQ。

思路:这道题是一道典型的动规,输入字符串a和b后,我们知道有三种待转移情况:替换(dp[i][j]=dp[i-1][j-1+1),删除(dp[i][j]=dp[i-1][j]+1),插入(dp[i][j]=dp[i][j-1]),当然这是不等的情况,如果相等就是dp[i][j]=dp[i-1][j-1]。既然我们要求最小,如果相等,就直接赋值就好了。如果不等,就用min判断这三种待转移状态哪个最小就好了。蛮简单的一道dp,只要想出转移方程的话这道题就很简单了。然后上参考代码:

1 #include
2 using namespace std; 3 char a[2005],b[2005]; 4 int la,lb,dp[2005][2005]; 5 int main() 6 { 7 gets(a+1);//从1开始读入 8 gets(b+1); 9 la=strlen(a+1);//看字符串长度 10 lb=strlen(b+1);11 for(int i=1;i<=la;i++) dp[i][0]=i;//赋边界值 12 for(int i=1;i<=lb;i++) dp[0][i]=i;13 for(int i=1;i<=la;i++)14 {15 for(int j=1;j<=lb;j++)16 {17 if(a[i]==b[j]) dp[i][j]=dp[i-1][j-1];//如果相等,就直接复制 18 else dp[i][j]=min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1]))+1;//不等就判断哪种待转移状态最小 19 }20 }21 printf("%d",dp[la][lb]);//输出 22 return 0;//完美结束 23 }

 

转载于:https://www.cnblogs.com/jiuduSHENBENG/p/9495602.html

你可能感兴趣的文章
MYSQL trigger 个人记录
查看>>
UEFI +、GPT 、BIOS 、 MBR的关系
查看>>
这两年在QQGame写过的游戏(2012.7.15-2014.8.25)
查看>>
spring中得到servletContext对象方法
查看>>
spring aop配置文档部分翻译
查看>>
Android开发:碎片Fragment完全解析fragment_main.xml/activity_main.xml(转)
查看>>
Android 制作一个网页源代码浏览器(HttpURLConnection)
查看>>
导入模块
查看>>
代码规范之道
查看>>
java23中设计模式之适配器模式
查看>>
面向对象的JavaScript(一)命名空间
查看>>
SQL Server调优系列基础篇
查看>>
事件处理程序中 this 的指向
查看>>
Bugly符号化iOS 崩溃,快速定位crash(上传符号表)
查看>>
idea添加内存
查看>>
装饰器
查看>>
【leetcode刷题笔记】Largest Rectangle in Histogram
查看>>
Fiddler2(汉化版)下载
查看>>
数据结构与算法分析Java版pdf
查看>>
luogu p1387 最大正方形
查看>>