编辑距离的动态规划算法(未优化)
假设求mouth 和 math的编辑距离
m | o | u | t | h | ||
0 | 1 | 2 | 3 | 4 | 5 | |
m | 1 | 0 | 1 | 2 | 3 | 4 |
a | 2 | 1 | 1 | 2 | 3 | 4 |
t | 3 | 2 | 2 | 2 | 2 | 3 |
h | 4 | 3 | 3 | 3 | 3 | 2 |
package demo10;
import java.util.Scanner;
public class test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
String A = input.next();
char[] A1 = A.toCharArray();
String B = input.next();
char[] B1 = B.toCharArray();
int[][] C = new int[A.length()+1][B.length()+1];
for (int i = 0; i <= A.length(); i++)
C[i][0] = i;
for (int i = 1; i <= B.length(); i++) // 这个嵌套for循环就是填表的过程
{
C[0][i] = i;
for (int j = 1; j <= A.length(); j++)
{
if (A1[j-1] == B1[i-1]) //A1[j-1]在C的第j行,B1[i-1]在C的第i列
C[j][i] = C[j - 1][i - 1];
else
C[j][i] = min(C[j-1][i], C[j-1][i-1], C[j][i-1]) + 1;
}
}
System.out.println(C[A.length()][B.length()]);// 最后输出右下角的值
}
private static int min(int i, int j, int k) {
// TODO Auto-generated method stub
if (i < j)
j = i;
if (k < j)
j = k;
return j;
}
}