题解 | #计算字符串的编辑距离#
计算字符串的编辑距离
https://www.nowcoder.com/practice/3959837097c7413a961a135d7104c314
import java.util.Scanner; import java.math.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNext()) { // 注意 while 处理多个 case String text1 = in.nextLine(); String text2 = in.nextLine(); int m = text1.length(); int n = text2.length(); int[][] dp = new int[m+1][n+1]; // dp[1][0] = dp[0][1] = 1; for (int i = 0; i < n+1; i++) { dp[0][i] = i; } for (int i = 0; i < m+1; i++) { dp[i][0] = i; } for (int i = 1; i <= m; i++) { for(int j = 1; j <= n; j++) { // 2个字符串分别在i和j位置的字符相同,编辑距离是dp[i-1][j-1](无需编辑)、 dp[i-1][j] + 1(删除或插入) // 和dp[i][j-1] + 1(删除插入)中的最小值 if (text1.charAt(i-1) == text2.charAt(j-1)) { dp[i][j] = Math.min(Math.min(dp[i-1][j-1], dp[i-1][j] + 1), dp[i][j-1] + 1); } else { // 2个字符串分别在i和j位置的字符不同,编辑距离是dp[i-1][j-1] + 1(替换)、dp[i-1][j] + 1(插入或删除) // 和dp[i][j-1] + 1(插入或删除)中的最小值 dp[i][j] = Math.min(Math.min(dp[i-1][j-1] + 1, dp[i-1][j] + 1), dp[i][j-1] + 1); } } } System.out.println(dp[m][n]); } } }