动态规划-编辑距离

设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);        
    }
}
原文地址:https://www.cnblogs.com/ljs-666/p/8035144.html