关于网友提出的“ csdn编程挑战--另类编辑距离”问题疑问,本网通过在网上对“ csdn编程挑战--另类编辑距离”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: csdn编程挑战--另类编辑距离
描述: 题目详情
传统的编辑距离里面有三种操作,即增、删、改,我们现在要讨论的编辑距离只允许两种操作,即增加一个字符、删除一个字符。我们求两个字符串的这种编辑距离,即把一个字符串变成另外一个字符串的最少操作次数。
输入格式:
多组数据,每组数据两行,每行一个字符串。每个字符串长度不超过1000,只有大写英文字母组成。
输出格式:
每组数据输出一行包含一个整数,表示需要最少操作的次数。
答题说明
输入样例
A
ABC
BC
A
输出样例:
2
3
我的代码在vs2012上可以运行,但是提交之后不对,改了好多次了,找不到错误,求大神们帮个忙。
#include
#include
#include
using namespace std;
//计算本程序中的编辑距离
int caldist(string str1,string str2)
{
int dist=0;
int len1,len2;
len1=str1.length();
len2=str2.length();
//计算最大公共子序列
vector<>> map;//map[len1][len2]
vector temp;
for(int i=0;i<=len2;i++)
{
temp.push_back(0);
}
for(int i=0;i<=len1;i++)
{
map.push_back(temp);
}
for(int i=0;i<>
{
for(int j=0;j<>
{
if(str1[i]==str2[j])
{
map[i+1][j+1]=map[i][j]+1;
}
else
{
map[i+1][j+1]=max(map[i+1][j],map[i][j+1]);
}
}
}
/*
for(int i=0;i<=len1;i++)
{
for(int j=0;j<=len2;j++)
{
cout<<>
}
cout<<>
}*/
dist=map[len1][len2];
//两个字符串的长度和-最大公共子序列*2,即是结果
dist=len1+len2-dist*2;
return dist;
}
int main()
{
string str1,str2;
const int T=10;//T组输入
int dist[T];
for(int i=0;i<>
{
cin>>str1;
cin>>str2;
dist[i]=caldist(str1,str2);
}
cout<<>
for(int i=0;i<>
{
cout<<><>
}
return 0;
}
解决方案1: 哪里有错???
解决方案2: 没提数据不超过2000组啊。
以上介绍了“ csdn编程挑战--另类编辑距离”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3626592.html