1. 题目
读题
考查点
2. 解法
思路
代码逻辑
具体实现
// 定义一个类,用来计算两个字符串之间的编辑距离
public class EditDistance {
// 定义一个静态方法,接受两个字符串作为参数,返回它们之间的编辑距离
public static int editDistance(String str1, String str2) {
// 获取两个字符串的长度
int m = str1.length();
int n = str2.length();
// 创建一个二维数组,用来存储动态规划的结果
int[][] dp = new int[m + 1][n + 1];
// 初始化边界条件
for (int i = 0; i <= m; i++) {
dp[i][0] = i; // 第一列表示将 str1 的前 i 个字符转换成空字符串所需的操作次数
}
for (int j = 0; j <= n; j++) {
dp[0][j] = j; // 第一行表示将空字符串转换成 str2 的前 j 个字符所需的操作次数
}
// 遍历两个字符串,填充动态规划数组
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
// 如果当前字符相同,则不需要进行任何操作,编辑距离等于左上角的值
if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
dp[i][j] = dp[i - 1][j - 1];
} else {
// 如果当前字符不同,则需要进行替换、插入或删除操作,编辑距离等于左上角、左边或上边的值中的最小值加一
dp[i][j] = Math.min(Math.min(dp[i - 1][j - 1], dp[i][j - 1]), dp[i - 1][j]) + 1;
}
}
}
// 返回最终结果,即右下角的值
return dp[m][n];
}
// 测试一下方法的效果
public static void main(String[] args) {
String str1 = "HJ52";
String str2 = "HJ53";
System.out.println("The edit distance between " + str1 + " and " + str2 + " is " + editDistance(str1, str2));
}
}