【转载】去重判断,比较字符串相似度

比较的字符串长度。

  #region  比较字符串相似度
         private  static  int min( int one,  int two,  int three)
        {
             int min = one;
             if (two < min)
            {
                min = two;
            }
             if (three < min)
            {
                min = three;
            }
             return min;
        }
         public  static  int LD(String str1, String str2)
        {
             int[,] d;      //  矩阵 
             int n = str1.Length;
             int m = str2.Length;
             int i;      //  遍历str1的 
             int j;      //  遍历str2的 
             char ch1;      //  str1的 
             char ch2;      //  str2的 
             int temp;      //  记录相同字符,在某个矩阵位置值的增量,不是0就是1 
             if (n ==  0)
            {
                 return m;
            }
             if (m ==  0)
            {
                 return n;
            }
            d =  new  int[n +  1, m +  1];
             for (i =  0; i <= n; i++)
            {      //  初始化第一列 
                d[i,  0] = i;
            }
             for (j =  0; j <= m; j++)
            {      //  初始化第一行 
                d[ 0, j] = j;
            }
             for (i =  1; i <= n; i++)
            {      //  遍历str1 
                ch1 = str1[i -  1];
                 //  去匹配str2 
                 for (j =  1; j <= m; j++)
                {
                    ch2 = str2[j -  1];
                     if (ch1 == ch2)
                    {
                        temp =  0;
                    }
                     else
                    {
                        temp =  1;
                    }
                     //  左边+1,上边+1, 左上角+temp取最小 
                    d[i, j] = min(d[i -  1, j] +  1, d[i, j -  1] +  1, d[i -  1, j -  1] + temp);
                }
            }
             return d[n, m];
        }

         // 返回两个字符串的相似度,返回一个0到100之间的整数,值越大,表示相似度越高
         public  static  int similar(String newStr, String targetStr)
        {
             int ld = LD(newStr, targetStr);
             double i =  1 - ( double)ld / ( double)Math.Max(newStr.Length, targetStr.Length);
             int similar = Convert.ToInt32(Math.Round((Convert.ToDecimal(i)),  2, MidpointRounding.AwayFromZero) *  100);
             return similar;
        }
         #endregion

 

转载于:https://www.cnblogs.com/daytoday/archive/2012/08/16/2642213.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值