欢迎访问宙启技术站
智能推送

使用Java函数计算两个字符串的编辑距离

发布时间:2023-08-25 23:07:48

编辑距离(Levenshtein Distance)是衡量两个字符串之间差异的度量。它是通过计算将一个字符串转换为另一个字符串所需的最少编辑操作次数来确定的。这些编辑操作包括插入、删除和替换字符。

下面是一个使用Java函数计算两个字符串的编辑距离的示例:

public class EditDistance {
  
  public static int calculate(String str1, String str2) {
    int len1 = str1.length();
    int len2 = str2.length();

    int[][] dp = new int[len1 + 1][len2 + 1];

    for (int i = 0; i <= len1; i++) {
      dp[i][0] = i;
    }

    for (int j = 0; j <= len2; j++) {
      dp[0][j] = j;
    }

    for (int i = 1; i <= len1; i++) {
      for (int j = 1; j <= len2; j++) {
        if (str1.charAt(i - 1) != str2.charAt(j - 1)) {
          dp[i][j] = 1 + Math.min(Math.min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]);
        } else {
          dp[i][j] = dp[i - 1][j - 1];
        }
      }
    }

    return dp[len1][len2];
  }

  public static void main(String[] args) {
    String str1 = "kitten";
    String str2 = "sitting";
    int distance = calculate(str1, str2);
    System.out.println("The edit distance between \"" + str1 + "\" and \"" + str2 + "\" is: " + distance);
  }

}

在这个示例中,我们定义了一个calculate函数来计算两个字符串的编辑距离。函数使用动态规划方法,通过填充一个二维数组dp来存储编辑距离。数组的行数和列数分别是两个字符串的长度加一,以包含空字符串的情况。

然后,我们初始化第一行和第一列的值,分别表示从一个空字符串转换为另一个字符串的编辑距离。接下来,我们使用两层嵌套循环遍历两个字符串的每个字符,并根据字符是否相同分别进行编辑操作的计算。

最后,函数返回dp数组中最右下角元素的值,这个值代表了将一个字符串转换为另一个字符串所需的最少编辑操作次数。

在主函数中,我们给定了两个字符串"kitten"和"sitting",并打印出它们之间的编辑距离。

执行上述代码,输出结果为:

The edit distance between "kitten" and "sitting" is: 3

这意味着将字符串"kitten"转换为"sitting"所需的最少编辑操作次数是3。

值得注意的是,上述代码只计算了两个字符串之间的最短编辑距离,并没有给出具体的编辑操作步骤。如果需要记录编辑操作步骤,可以使用额外的数据结构来保存每个编辑操作的类型和位置信息。