AOJ AHU 173编辑距离
2015-07-20 21:19
429 查看
[align=center]编辑距离[/align]
Time Limit: 1000 ms Case Time Limit: 1000 ms Memory Limit: 64 MB
Total Submission: 409 Submission Accepted: 99
[align=center][/align]
Description
假设字符串的基本操作仅为:删除一个字符、插入一个字符和将一个字符修改成另一个字符这三种操作。
我们把进行了一次上述三种操作的任意一种操作称为进行了一步字符基本操作。
下面我们定义两个字符串的编辑距离:对于两个字符串a和b,通过上述的基本操作,我们可以把a变成b或b变成a,那么字符串a变成字符串b需要的最少基本字符操作步数称为字符串a和字符串b的编辑距离。
例如:a="ABC",b="CBCD",则a与b的编辑距离为2。
你的任务就是:编一个快速的程序来计算任意两个字符串的编辑距离。
Input
输入包含多组测试数据。每组测试数据一行,为字符串A和字符串B。
字符串的长度不大于1024,且全为字母。
Output
编辑距离。
Sample Input
Sample Output
Hint
动态规划算法
解法
Time Limit: 1000 ms Case Time Limit: 1000 ms Memory Limit: 64 MB
Total Submission: 409 Submission Accepted: 99
[align=center][/align]
Description
假设字符串的基本操作仅为:删除一个字符、插入一个字符和将一个字符修改成另一个字符这三种操作。
我们把进行了一次上述三种操作的任意一种操作称为进行了一步字符基本操作。
下面我们定义两个字符串的编辑距离:对于两个字符串a和b,通过上述的基本操作,我们可以把a变成b或b变成a,那么字符串a变成字符串b需要的最少基本字符操作步数称为字符串a和字符串b的编辑距离。
例如:a="ABC",b="CBCD",则a与b的编辑距离为2。
你的任务就是:编一个快速的程序来计算任意两个字符串的编辑距离。
Input
输入包含多组测试数据。每组测试数据一行,为字符串A和字符串B。
字符串的长度不大于1024,且全为字母。
Output
编辑距离。
Sample Input
Original | Transformed |
ABC CBCD
ABC[SP]CBCD[EOF]
Sample Output
Original | Transformed |
2
2[EOF]
Hint
动态规划算法
解法
#include<stdio.h> #include<string.h> #define MAX 1050 int dp[MAX][MAX]; int dis(char str1[],char str2[]){ int m,n,i,j,min; m=strlen(str1); n=strlen(str2); for(i=0;i<=m;i++){ dp[i][0]=i; } for(i=0;i<=n;i++){ dp[0][i]=i; } for(j=1;j<=n;j++){ for(i=1;i<=m;i++){ if(str1[i-1]==str2[j-1]){ dp[i][j]=dp[i-1][j-1]; }else{ min=(dp[i-1][j]<dp[i][j-1])?(dp[i-1][j]+1):(dp[i][j-1]+1); dp[i][j]=(min<(dp[i-1][j-1]+1))?min:(dp[i-1][j-1]+1); } } } return dp[m] ; } int main(){ char a[1050]; char b[1050]; while((~scanf("%s",a))&&(~scanf("%s",b))){ printf("%d\n",dis(a,b)); } return 0; }
相关文章推荐
- 【Spark Core】从作业提交到任务调度完整生命周期浅析
- 积分赚取太麻烦了
- polipo代理服务器简介
- windows核心编程之sleep
- 2015072004 - 农村的高考生
- HDOJ 2080 Lowest Common Multiple Plus
- 【Spark Core】任务执行机制和Task源码浅析2
- Linux下inotify的基本使用及注意事项
- 字符设备驱动之从用户程序中的系统调用到驱动中的具体实现
- [leedcode 102] Binary Tree Level Order Traversal
- 九度oj 1052
- C#的开始
- (七十八)使用第三方框架INTULocationManager实现定位
- java 设计模式 工厂模式
- Qt中show()与exec()
- POJ2966时区时间转换
- 【Spark Core】任务执行机制和Task源码浅析1
- (七十八)使用第三方框架INTULocationManager实现定位
- 栈
- 转:Redis Geo: Redis新增位置查询功能