字符串距离

int calcstrdis(char * src, char * des, int srclength, int deslength)
{
    int i(0);
    int j(0);
    int tempresult(0);
    int ** rss = new int *[deslength + 1];
    for (i = 0; i <= deslength; ++ i)
        rss[i] = new int[srclength + 1];
    for (i = 0; i <= deslength; ++ i)
        rss[i][0] = i;
    for (i = 0; i <= srclength; ++ i)
        rss[0][i] = i;
    for (i = 1; i <= deslength; ++ i)
        for (j = 1; j <= srclength; ++ j)
            if (des[i] == src[j])
                rss[i][j] = rss[i - 1][j - 1];
            else
            {
                tempresult = rss[i - 1][j - 1];
                tempresult = tempresult < rss[i - 1][j] ? tempresult : rss[i - 1][j];
                tempresult = tempresult < rss[i][j - 1] ? tempresult : rss[i][j - 1];
                rss[i][j] = tempresult + 1;
            }
    tempresult = rss[deslength][srclength];
    for (i = 0; i <= deslength; ++ i)
        delete[] rss[i];
    delete[] rss;
    return tempresult;
}

测试

#include <iostream>

using namespace std;

int main()
{
    char * src = "snowyk";
    char * des = "asunnyk";
    cout
        << calcstrdis(src, des, strlen(src), strlen(des))
        << endl;
    return 0;
}
时间: 2024-11-06 21:46:39

字符串距离的相关文章

字符串距离 简单DP

字符串距离 时间限制: 1 Sec  内存限制: 128 MB 题目描述 设有字符串 X,我们称在 X 的头尾及中间插入任意多个空格后构成的新字符串为 X 的扩展串,如字符串 X 为"abcbcd",则字符串"abcb□cd","□a□bcbcd□"和"abcb□cd□"都是 X 的扩展串,这里"□"代表空格字符. 如果 A 1 是字符串 A 的扩展串,B 1 是字符串 B 的扩展串,A 1 与 B 1 具

Levenshtein字符串距离算法介绍

Levenshtein字符串距离算法介绍 文/开发部 Dimmacro KMP完全匹配算法和 Levenshtein相似度匹配算法是模糊查找匹配字符串中最经典的算法,配合近期技术栏目关于算法的探讨,上期介绍了KMP算法的一些皮毛,收到了同事的一些反馈,本期再接再厉,搜集了一些资料,简单谈谈Levenshtein相似度匹配算法,希望能抛砖引玉. 算法简介: Levenshtein distance最先是由俄国科学家Vladimir Levenshtein在1965年发明,其原理是两个字符串之间,由

机器学习中的度量——字符串距离

??????机器学习是时下流行AI技术中一个很重要的方向,无论是有监督学习还是无监督学习都使用各种"度量"来得到不同样本数据的差异度或者不同样本数据的相似度.良好的"度量"可以显著提高算法的分类或预测的准确率,本文中将介绍机器学习中各种"度量","度量"主要由两种,分别为距离.相似度和相关系数,距离的研究主体一般是线性空间中点:而相似度研究主体是线性空间中向量:相关系数研究主体主要是分布数据.本文主要介绍字符串距离. 1 汉明

一本通 1298:计算字符串距离

计算字符串距离 同样也是字符串距离计算问题,参考一本通 1276:[例9.20]编辑距离 Code: #include <iostream> #include <cstdio> #include <cstring> using namespace std; //Mystery_Sky // #define INF 0x3f3f3f3f #define M 3000 int f[M][M]; int len_a, len_b; char a[M], b[M]; int m

计算字符串距离

描述: Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符.编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance. Ex: 字符串A:abcdefg 字符串B: abcdef 通过增加或是删掉字符”g”的方式达到目的.这两种方案都需要一次操作.把这个操作所需要的次数定义为两个字符串的距离. 要求: 给定任意两个字

【noi 2.6_2988】计算字符串距离(DP)

题意: 给两个字符串,可以增.删.改,问使这两个串变为相同的最小操作数. 解法:(下面2种的代码主要区别在初始化和,而状态转移方程大家可挑自己更容易理解的方法打) 1.f[i][j]表示a串前i个和b串前j个完成匹配的最小操作数. 2.f[i][j]表示a串前i-1个和b串前j-1个完成匹配的最小操作数. 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream&g

openjudge-NOI 2.6-2988 计算字符串距离

题目链接:http://noi.openjudge.cn/ch0206/2988/ 题解: 首先,题目有误,少了一个添加操作 和求解LCS之类的思路类似 f[i][j]表示a序列中1..i的部分和b序列中1...j的部分的编辑距离,得: (1)i==0,j==0时,f[i][j]=0: (2)i==0,j>0时,f[i][j]=j:j==0,i>0时,f[i][j]=i:即需要对空串进行i或j个添加操作: (3)否则,f[i][j]=min(f[i-1][j]+1,f[i][j-1]+1,f[

详谈Format String(格式化字符串)漏洞

格式化字符串漏洞由于目前编译器的默认禁止敏感格式控制符,而且容易通过代码审计中发现,所以此类漏洞极少出现,一直没有笔者本人的引起重视.最近捣鼓pwn题,遇上了不少,决定好好总结了一下. 格式化字符串漏洞最早被Tymm Twillman在1999年发现,当时并未引起重视.在tf8的一份针对wu-ftpd格式化字符串漏洞实现任意代码执行的漏洞的报告之后(详情可参阅 <黑客攻防技术宝典-系统实战篇>),才让人们意识到它的危害,至此而发现了大量的相关漏洞. 格式化字符串漏洞的产生根源主要源于对用 户输

【转】字符串编辑距离

原文:http://m.blog.csdn.net/blog/cqs_2012/17849877 题目 有两个字符串A和B,对A可以进行如下的操作:插入一个字符,删除一个字符,替换一个字符.问A可以通过最少多少次操作变为B?我们定义这个结果为字符串的最小编辑距离. 思路(借鉴九章算法的,感觉挺好,所以实现,共同学习) 字符串编辑距离归为DP题目,所以还是超好的 1 for(int i = 0;i<int(b.size()+1);i++) 2 dp[i] = new int[a.size()+1]