dp-编辑距离HLG
来源:互联网 发布:mac微信语音导出软件 编辑:程序博客网 时间:2024/05/01 06:01
Time Limit: 1000 MS
Memory Limit: 65536 K
编辑距离
Total Submit: 225(87 users)
Total Accepted: 110(82 users)
Rating:
Special Judge: No
Description
俄罗斯科学家Vladimir
Levenshtein在1965年提出了编辑距离概念。编辑距离,又称Levenshtein距离,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。许可的三种编辑操作包括插入一个字符、删除一个字符、将一个字符替换成另一个字符。
至今,编辑距离一直在相似句子检索的领域中发挥着不可忽视的作用。
我们不妨来设计一个程序,计算两个字符串的编辑距离。
Input
输入数据的第一行是一个正整数,表示一共有几组数据。
每组数据有两行,每行一个字符串。
* 每个字符串长度不超过1000
* 字符串中只含小写英文字母
Output
对于每组数据,请输出一个整数表示两个字符串的编辑距离。
每个答案占一行。
Sample Input
2
david
vivian
abc
aabbcc
Sample Output
4
3
/*编辑距离动态规划算法思路:1.输入的时候两个字符串都要+1蓝后测试其长度的时候也要+1(特殊点 暂时还没有弄懂到底是什么意识)
2.对dp的框架有个初步的设定(从0开始到la长度和lb长度)设定为0123456789.......
3.余下dp的设定.两个for循环开始扫 如果两个字母相同就等于dp[i-1][j-1]不然就是dp[i][j]+1;并且要和左边的上边的+1进行比较取小值*/
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
char a[1005];
char b[1005];
int dp[1010][1010];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s%s",a+1,b+1);
int la=strlen(a+1);
int lb=strlen(b+1);
//printf("%c",a[1]);//其实a[1]是才是字符串第一个元素哦.
for(int i=0;i<=la;i++)//必须是a字符串为行b字符串为列 表示a对b的编辑距离.
dp[i][0]=i;
for(int j=0;j<=lb;j++)
dp[0][j]=j;
for(int i=1;i<=la;i++)
{
for(int j=1;j<=lb;j++)
{
dp[i][j]=(a[i]==b[j])?dp[i-1][j-1]:dp[i-1][j-1]+1;//至于为什么是相等就等于dp[i-1][j-1]可参考dp后台数据0.0
dp[i][j]=min(dp[i][j],dp[i][j-1]+1);
dp[i][j]=min(dp[i][j],dp[i-1][j]+1);//先和哪个比无所谓
}
}
/* for(int i=0;i<=la;i++)
{
for(int j=0;j<=lb;j++)
{
printf("%d",dp[i][j]);
}
}*/
printf("%d\n",dp[la][lb]);
}
}
- dp-编辑距离HLG
- 编辑距离 (dp)
- 【dp】编辑距离问题
- zjut1699-编辑距离dp
- 编辑距离问题 dp
- DP解编辑距离
- 编辑距离(DP)
- dp 编辑距离问题
- 1183 编辑距离 dp
- dp - 编辑距离
- DP-编辑距离问题
- 编辑距离(dp)
- 编辑距离 dp
- 编辑距离 (dp)
- dp--编辑距离
- 【DP】编辑距离
- 编辑距离 dp
- dp专题:编辑距离
- 如何优化 Android Studio 启动、编译和运行速度?
- Animation
- From scikit-learn to Spark ML
- jhat 应用
- 应用中添加QQ群(android、iOS、网页、二维码)
- dp-编辑距离HLG
- mysql 主重复制过程
- iOS常用宏定义
- 推送通知,非常详细
- Moebius for SQLServer负载均衡
- 小乐乐大逃亡HLG
- HDU 1853 Cyclic Tour && HDU 3488Tour KM算法
- android IPC通信(上)-sharedUserId&&Messenger
- AuidioStreamPlayer简易实现