您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> csdn编程挑战--另类编辑距离

csdn编程挑战--另类编辑距离

来源:网络整理     时间:2016/8/27 6:31:45     关键词:

关于网友提出的“ 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

相关图片

相关文章