Edit Distance || 计算字符串相似度

Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)

You have the following 3 operations permitted on a word:

a) Insert a character

b) Delete a character

c) Replace a character

字符串相似度定义为 1/距离

二维dp,O(m*n)空间

public class Solution {
    public int minDistance(String word1, String word2) {
        int m=word1.length();
        int n=word2.length();
        int [][]f=new int[m+1][n+1];
        for(int i=0;i<=n;i++) f[0][i]=i;
        for(int i=0;i<=m;i++) f[i][0]=i;
        for(int i=1;i<=m;i++){
            for(int j=1;j<=n;j++){
                if(word1.charAt(i-1)==word2.charAt(j-1)){
                    f[i][j]=f[i-1][j-1];
                }
                else{
                    int tmp=Math.min(f[i-1][j],f[i][j-1]);
                    f[i][j]=Math.min(tmp,f[i-1][j-1])+1;
                }
            }
        }
        return f[m][n];
    }
}

二维dp,滚动数组,O(n)空间

public class Solution {
    public int minDistance(String word1, String word2) {
        int m=word1.length();
        int n=word2.length();
        int []f=new int[n+1];
        int upleft=0;
        for(int i=0;i<=n;i++) f[i]=i;
        for(int i=1;i<=m;i++){
            upleft=f[0];
            f[0]=i;
            for(int j=1;j<=n;j++){
                int up=f[j];
                if(word1.charAt(i-1)==word2.charAt(j-1)){
                    f[j]=upleft;
                }
                else{
                    int tmp=Math.min(f[j],f[j-1]);
                    f[j]=Math.min(upleft,tmp)+1;
                }
                upleft=up;
            }
        }
        return f[n];
    }
}

Edit Distance || 计算字符串相似度

时间: 2024-10-13 04:11:39

Edit Distance || 计算字符串相似度的相关文章

计算字符串相似度算法——Levenshtein http://wdhdmx.iteye.com/blog/1343856

0.这个算法实现起来很简单 1.百度百科介绍: Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数. 许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance. 2.用途 模糊查询 3.实现过程 a.首先是有两个字符串,这里写一个简单的 abc和abe b.将字符串想象成下面的结构. A处 是一个标记,为了方便讲解

计算字符串相似度算法——Levenshtein

0.这个算法实现起来很简单 1.百度百科介绍: Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数. 许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance. 2.用途 模糊查询 3.实现过程 a.首先是有两个字符串,这里写一个简单的 abc和abe b.将字符串想象成下面的结构. A处 是一个标记,为了方便讲解

编程之美——计算字符串相似度

方法一:使用递归思想 代码: 1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 int minValue(int t1,int t2,int t3); 6 int calculateStringDistance(string strA,int pAbegin,int pAend,string strB,int pBbegin,int pBend); 7 8 int main() 9 { 10 str

LeetCode:Edit Distance(字符串编辑距离DP)

Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.) You have the following 3 operations permitted on a word: a) Insert a character b) Delete a character c) Repla

字符串相似度算法(编辑距离算法 Levenshtein Distance)(转)

在搞验证码识别的时候需要比较字符代码的相似度用到“编辑距离算法”,关于原理和C#实现做个记录. 据百度百科介绍: 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 例如将kitten一字转成sitting: sitten (k→s) sittin (e→i) sitting (→g) 俄罗斯科学家V

C#和SQL实现的字符串相似度计算代码分享

http://www.jb51.net/article/55941.htm C#实现: 复制代码 代码如下: #region 计算字符串相似度        /// <summary>         /// 计算字符串相似度         /// </summary>         /// <param name="str1">字符串1</param>         /// <param name="str2&qu

字符串相似度计算的方法,使用SQL以及C#实现,本文非原创摘自网络(.NET SQL技术交流群入群206656202需注明博客园)

1 CREATE function get_semblance_By_2words 2 ( 3 @word1 varchar(50), 4 @word2 varchar(50) 5 ) 6 returns nvarchar(4000) 7 as 8 begin 9 declare @re int 10 declare @maxLenth int 11 declare @i int,@l int 12 declare @tb1 table(child varchar(50)) 13 declare

Min Edit Distance

Min Edit Distance ----两字符串之间的最小距离 PPT原稿参见Stanford:http://www.stanford.edu/class/cs124/lec/med.pdf Tips:由于本人水平有限,对MED的个人理解可能有纰漏之处,请勿尽信. Edit:个人理解指编辑之意,也即对于两个字符串,对其中的一个进行各种编辑操作(插入.删除.替换)使其变为另一个字符串.要解决的问题是求出最小的编辑操作次数是多少. 基因系列比对 定义距离: X,Y是大小分别为n,m的字符串. 定

比较2个字符串相似度

我们在做数据系统的时候,经常会用到模糊搜索,但是,数据库提供的模糊搜索并不具备按照相关度进行排序的功能.现在提供一个比较两个字符串相似度的方法.通过计算出两个字符串的相似度,就可以通过Linq在内存中对数据进行排序和筛选,选出和目标字符串最相似的一个结果. 本次所用到的相似度计算公式是 相似度=Kq*q/(Kq*q+Kr*r+Ks*s) (Kq > 0 , Kr>=0,Ka>=0)其中,q是字符串1和字符串2中都存在的单词的总数,s是字符串1中存在,字符串2中不存在的单词总数,r是字符串