import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine().trim();
String t = in.nextLine().trim();
int m = s.length();
int n = t.length();
int[][] dp = new int[m + 1][n + 1];
// 初始化第一列
for (int i = 0; i <= m; i++) {
dp[i][0] = i;
}
// 初始化第一行
for (int j = 0; j <= n; j++) {
dp[0][j] = j;
}
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (s.charAt(i - 1) == t.charAt(j - 1)) {
dp[i][j] = dp[i - 1][j - 1];
} else {
int replace = dp[i - 1][j - 1] + 1;
int insert = dp[i][j - 1] + 1;
int delete = dp[i - 1][j] + 1;
dp[i][j] = Math.min(replace, Math.min(insert, delete));
}
}
}
System.out.println(dp[m][n]);
}
}
https://www.nowcoder.com/discuss/727521113110073344
思路:
- 输入处理:读取两个字符串s和t,并去除前后空格。
- 初始化动态规划数组:二维数组dp的大小为(m+1) x (n+1),其中m和n分别为两个字符串的长度。
- 填充初始值:处理边缘情况,当其中一个字符串为空时,编辑距离即为另一个字符串的长度。
- 状态转移计算:遍历每个字符位置,根据字符是否相等来更新dp数组的值,最终得到两个字符串的编辑距离。



京公网安备 11010502036488号