博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva 164 String Computer
阅读量:5812 次
发布时间:2019-06-18

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

DP(经典题):字符串最短编辑距离

关于计算最短编辑距离的资料有很多,这里不详说,这题还要求输出路径,并且注意到是实时的输出,关键在于输出中的那个数字,即位置

代码中已经有详细分析

 

/*dp[i][j]表示a串前i个字符和b串前j个字符的最短编辑距离1.dp[i][j]=dp[i-1][j]+1 即先删除a串的第i个字符,然后使其前i-1个字符与b串的前j个字符相同2.dp[i][j]=dp[i][j-1]+1 即先让a串的前i个字符和b串的前j-1个字符相同,然后再在a串后面插入b[j]这个字符3.dp[i][j]=dp[i-1][j-1]+(a[i]==b[j]?0:1)   即先让a串前i-1个字符和b串前j-1个字符相同,看a[i]是否等于b[j],等于的话不需要操作,不等让a[i]变为b[j]dp[i][j]=min{1,2,3}最后来解决一下如何保存路径的问题,p[i][j]=1,2,3,表示得到dp[i][j]的时候是用了第几个策略p[i][j]=1,说明用了策略1,是删除了a[i],所以输出删除对应的语句,注意此时对应的位置是j+1,并接着去到p[i-1][j]p[i][j]=2,说明用了策略2,是插入了b[j],所以输出插入对应的语句,注意此时对应的位置是j,并接着去到p[i][j-1]p[i][j]=0,说明用了策略3,但没有更换,不用输出,并接着去到p[i-1][j-1]p[i][j]=3,说明用了策略3,是更换了a[i],所以输出更换对应的语句,注意此时对应的位置是j,并接着去到p[i-1][j-1]p数组初始化为-1,p[i][j]=-1,则说明路径到达了尽头,或者(i==0 && j==0)也是尽头标志,表示a串和b串都已经递归处理完*/#include 
#include
#define N 25#define INF 0x3f3f3f3fchar a[N],b[N];int dp[N][N],p[N][N];int min(int i ,int j ,int *s){ int f,k; for(k=1; k<=3; k++) if(s[k]

 

转载于:https://www.cnblogs.com/scau20110726/archive/2013/02/25/2932155.html

你可能感兴趣的文章
JSON path
查看>>
Win8 Metro(C#)数字图像处理--2.43图像马赛克效果算法
查看>>
动画库NineOldAndroids
查看>>
react-native 模仿原生 实现下拉刷新/上拉加载更多(RefreshListView)
查看>>
大数据开发实战:Hadoop数据仓库开发实战
查看>>
Spring Boot 2中对于CORS跨域访问的快速支持
查看>>
MySQL出现Access denied for user ‘root’@’localhost’ (using password:YES)
查看>>
matlab fread
查看>>
通过Roslyn构建自己的C#脚本(更新版)(转)
查看>>
红黑树
查看>>
mybatis08
查看>>
01 awk工具的使用
查看>>
UIImagePickerController拍照与摄像
查看>>
Maven--(一个坑)在settings.xml文件中添加mirrors导致无法新建Maven项目
查看>>
linux日志:syslogd和klogd及syslog
查看>>
Python模块学习笔记— —time与datatime
查看>>
python调用windows api
查看>>
linux添加somebody到组
查看>>
Linux内核中的printf实现【转】
查看>>
第四章 mybatis批量insert
查看>>