题解 | #计算字符串的编辑距离#
计算字符串的编辑距离
https://www.nowcoder.com/practice/3959837097c7413a961a135d7104c314
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) { BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); String a, b; try { a = r.readLine(); b = r.readLine(); } catch (IOException e) { throw new RuntimeException(e); } char[] start = a.toCharArray(); char[] end = b.toCharArray(); int i = 1, j, dis, row = start.length, col = end.length; int[][] edit = new int[row + 1][col + 1]; while (i < col + 1) {//第一行赋初值 edit[0][i] = i; i++; } i = 1; while (i < row + 1) {//第一列赋初值 edit[i][0] = i; i++; } i = 1; while (i < row + 1) {//状态转移将第一行、第一列的值,编辑后推算出矩阵其余位置的值 j = 1; while (j < col + 1) { if (start[i - 1] == end[j - 1]) edit[i][j] = edit[i - 1][j - 1]; else {//i行、j列不相等,则需要通过添加、修改操作变换,因为字符串是递增的,修改相当于先删除后添加,和为一步了 dis = Math.min(edit[i][j - 1] + 1, edit[i - 1][j] + 1);//获得左边值和上边值的最小值 dis = Math.min(dis, edit[i - 1][j - 1] + 1);//获得其和左上角的最小值 edit[i][j] = dis;//最小值赋给当前两单词的编辑距离 } j++; } i++; } System.out.print(edit[row][col]);//输出最终单词的编辑距离 } }