风也温柔

计算机科学知识库

java字符串相似度算法 java实现编辑距离算法(levenshtein distance)

  编辑距离算法其实就是,在规定的编辑操作(替换字符串、插入字符串、删除字符串)中java字符串相似度算法 java实现编辑距离算法(levenshtein distance),经过几步可以把一个字符串变成另一个字符串,而这个所需的步数就是你的编辑距离。

  测试样例:

  str1 = abc

  str2 = yabd

  表里的每一个值都代表着将str1转换成str2所需要的步数java字符串相似度算法,每个单元格的值都遵循这样一个规律,第一行和第一列都是从0到n;其他的值要分情况计算,行索引和列索引对比大小,相同的话直接取左上方单元格的值,不同的话对比其左上方、左边、上边,找到三个单元格之中的最小值再加1即这个单元格的值。

  str1 abc

  str2

  0123

  y1123

  a2123

  b3212

  d4332

  最后一个单元格的值就是两个字符串间不同字符的个数java字符串相似度算法,利用这个数与两个字符串中最长的长度相除就得到了不相似的程度,再用1减去就是相似率。

<p><pre class="cm-s-default" style="color:rgb( 89 , 89 , 89 );margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba( 0 , 0 , 0 , 0 )">public class FileCompared {

public static void main(String[] args) {
    String str1 = "ABCDEFGZ";
    String str2 = "ABFDFEGXY";
    System.out.println("两个字符串的相似率为:" + similarRates(str1,str2) +"%");
}
//定义一个similarRates方法获取两个字符串间不同字符的个数并求出两个字符串的相似率
public static int similarRates(String str1 , String str2){
    //确定二维距离表distance的维度
    int str1Len = str1.length();
    int str2Len = str2.length();
    //如果一个字符串的内容为空就返回另一个字符串的长度
    if (str1Len == 0) return str2Len;
    if (str2Len == 0) return str1Len;
    //定义一张二维距离表distance
    int[][] distance = new int[str1Len + 1][str2Len + 1];
    //给二维数组的第一行第一列赋值
    int maxLen = str1Len > str2Len ? str1Len : str2Len;
    for (int num = 0; num < maxLen + 1; num++){
        if (num