设A和 B是两个 是两个 英文 字符串 (仅包括英文字母,严格区分大小写 )。为 了将 A变换为 B,可以采用如下三种字符操作: ,可以采用如下三种字符操作: ,可以采用如下三种字符操作: ①删除一个字符; ②插入一个字 符; ③将一个字符 改为另外。A变换为字符串 变换为字符串 B所需的最小字 符操作数 (限以上三种操作 )称为 A到 B的编辑距离,记为 的编辑距离,记为 的编辑距离,记为 d(A,B) 。计算两个字符串的辑距离 编写程序,计算两个字符串的辑距离 d(A, d(A, B) 。
package test; import java.util.Scanner; public class test1 { public static int editDistance(String a, String b) { if (a == null || b == null) { return 0; } int[][] matrix = new int[a.length() + 1][b.length() + 1]; for (int i = 0; i < a.length() + 1; i++) { for (int j = 0; j < b.length() + 1; j++) { if (i == 0) { matrix[i][j] = j; } else if (j == 0) { matrix[i][j] = i; } else { if (a.charAt(i - 1) == b.charAt(j - 1)) { matrix[i][j] = matrix[i - 1][j - 1]; } else { matrix[i][j] = 1 + Math.min(Math.min(matrix[i - 1][j], matrix[i][j - 1]), matrix[i - 1][j - 1]); } } } } return matrix[a.length()][b.length()]; } public static void main(String arg[]) { Scanner input=new Scanner(System.in); String s1=input.nextLine(); String s2=input.nextLine(); int res=editDistance(s1,s2); System.out.print("d("+s1+","+s2+")="+res); } }