Levenshtein计算字符串的相似度

        static void Main(string[] args)
        {

            Levenshtein(@"今天天气不错", @"今天的天气不错啊");

            Console.Read();
        }

        /// <summary>
        /// 字符串相似度计算
        /// </summary>
        /// <param name="str1"></param>
        /// <param name="str2"></param>
        public static void Levenshtein(String str1, String str2)
        {
            //计算两个字符串的长度。
            int len1 = str1.Length;
            int len2 = str2.Length;
            //建立上面说的数组,比字符长度大一个空间
            int[,] dif = new int[len1 + 1, len2 + 1];
            //赋初值,步骤B。
            for (int a = 0; a <= len1; a++)
            {
                dif[a, 0] = a;
            }
            for (int a = 0; a <= len2; a++)
            {
                dif[0, a] = a;
            }
            //计算两个字符是否一样,计算左上的值
            int temp;
            for (int i = 1; i <= len1; i++)
            {
                for (int j = 1; j <= len2; j++)
                {
                    if (str1[i - 1] == str2[j - 1])
                    {
                        temp = 0;
                    }
                    else
                    {
                        temp = 1;
                    }
                    //取三个值中最小的
                    dif[i, j] = min(dif[i - 1, j - 1] + temp, dif[i, j - 1] + 1,
                            dif[i - 1, j] + 1);
                }
            }
            Console.WriteLine("字符串\"" + str1 + "\"与\"" + str2 + "\"的比较");
            //取数组右下角的值,同样不同位置代表不同字符串的比较
            Console.WriteLine("差异步骤:" + dif[len1, len2]);
            //计算相似度
            float similarity = 1 - (float)dif[len1, len2] / Math.Max(str1.Length, str2.Length);
            Console.WriteLine("相似度:" + similarity + " 越接近1越相似");
        }

        /// <summary>
        /// 得到最小值
        /// </summary>
        /// <param name="num"></param>
        /// <returns></returns>
        private static int min(params int[] num)
        {
            int min = Int32.MaxValue;
            foreach (var n in num)
            {
                if (min > n)
                {
                    min = n;
                }
            }
            return min;
        }
时间: 2024-10-12 16:00:35

Levenshtein计算字符串的相似度的相关文章

计算字符串的相似度

计算字符串的相似度 提出问题 许多程序会大量使用字符串.对于不同的字符串,我们希望能够有办法判断其相似程度.我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为: 1.修改一个字符(如把"a"替换为"b"). 2.增加一个字符(如把"abdd"变为"aebdd"). 3.删除一个字符(如把"travelling"变为"traveling"). 比如,对于"ab

[华为]计算字符串的相似度

链接:https://www.nowcoder.com/questionTerminal/f549ee08ddd84b8485a4fa9aefaf4a38来源:牛客网 对于不同的字符串,我们希望能有办法判断相似程度,我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法如下: 1 修改一个字符,如把"a"替换为"b". 2 增加一个字符,如把"abdd"变为"aebdd". 3 删除一个字符,如把"tr

华为机试-计算字符串的相似度

题目描述 对于不同的字符串,我们希望能有办法判断相似程度,我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法如下: 1 修改一个字符,如把"a"替换为"b". 2 增加一个字符,如把"abdd"变为"aebdd". 3 删除一个字符,如把"travelling"变为"traveling". 比如,对于"abcdefg"和"abcdef&qu

第3章 结构之法——计算字符串的相似度

计算字符串的相似度 问题描述 分析与解法 具体代码如下: 1 package chapter3jiegouzhifa.StringSimilarity; 2 /** 3 * 计算字符串的相似度 4 * [解法一] 5 * @author DELL 6 * 7 */ 8 public class StringSimilarity { 9 public static int CalculateStringDistance(String str1, int b1, int e1, String str

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

题目: 许多程序会大量使用字符串.对于不同的字符串,我们希望能够有办法判断其相似程序.我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为: 1.修改一个字符(如把"a"替换为"b"); 2.增加一个字符(如把"abdd"变为"aebdd"); 3.删除一个字符(如把"travelling"变为"traveling"); 比如,对于"abcdefg"和

Levenshtein Distance莱文斯坦距离算法来计算字符串的相似度

转 理解起来不难,但是很实用. 核心公式就是下面:             (1) 1.百度百科介绍: Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数. 许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance. 2.用途 模糊查询 3.实现过程 a.首先是有两个字符串,这里写一个简单的 abc和abe b.将

3.3 计算字符串的相似度

题目: 定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为: 1.修改一个字符(如把"a"替换为"b"); 2.增加一个字符(如把"abdd"变为"aebdd"); 3.删除一个字符(如把"travelling"变为"traveling"); 给定任意两个字符串,你是否能写出一个算法来计算它们的距离呢? 方法: 不难看出,两个字符串的距离肯定不超过它们的长度之和(我们可以通

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

对于不同的字符串,判断其相似程度.可以修改一个字符,增加一个字符,删除一个字符等操作. 分析:当两个字符串第一个字符相等时,直接把两个字符串跳到第二个位置开始比较就可以了.当两个字符串第一个字符不相等时,不管怎么操作总是,要么第一个串跳到第二个位置,第二个串位置不变:或者第一个串位置不变,第二个跳到第二个位置:或者两个串都跳到第二个位置(同过修改串的字符).于是就可以写个递归程序处理. 1 int calculateStringDistance(string strA, int pABegin,

【华为OJ】【083-计算字符串的相似度】

[华为OJ][算法总篇章] [华为OJ][083-计算字符串的相似度] [工程下载] 题目描述 对于不同的字符串,我们希望能有办法判断相似程度,我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法如下: 1 修改一个字符,如把"a"替换为"b". 2 增加一个字符,如把"abdd"变为"aebdd". 3 删除一个字符,如把"travelling"变为"traveling"