/**
* 计算编辑距离Edit Distance
* if i == 0 且 j == 0,edit(i, j) = 0
* if i == 0 且 j > 0,edit(i, j) = j
* if i > 0 且j == 0,edit(i, j) = i
* if i ≥ 1 且 j ≥ 1 ,edit(i, j) == min{ edit(i-1, j) + 1, edit(i, j-1) + 1, edit(i-1, j-1) + temp },
* 当第word1第i个字符不等于word2的第j个字符时,temp = 1;否则,temp = 0。
*
* @param word1 字符串1
* @param word2 字符串2
* @return 取二位矩阵的最后一个元素的值, 就是minEditDist arr[word1.length][word2.length]
*/
public int minEditDistance(String word1, String word2) {
/**
* 判空,word1为空,取Word2的长度,反之,亦然
*/
if (word1.length() == 0 || word2.length() == 0) {
return word1.length() == 0 ? word2.length() : word1.length();
}
//初始化矩阵
int[][] arr = new int[word1.length() + 1][word2.length() + 1];
for (int i = 0; i <= word1.length(); i++) {
arr[i][0] = i;
}
for (int j = 0; j <= word2.length(); j++) {
arr[0][j] = j;
}
/**
* 填充矩阵
*/
for (int i = 1; i <= word1.length(); i++) {
for (int j = 1; j <= word2.length(); j++) {
if (word1.charAt(i - 1) == word2.charAt(j - 1)) {
//相等时temp为0
arr[i][j] = arr[i - 1][j - 1];
} else {
//不相等时,temp为1
int replace = arr[i - 1][j - 1] + 1;
int insert = arr[i - 1][j] + 1;
int delete = arr[i][j - 1] + 1;
int min = Math.min(replace, insert);
min = Math.min(min, delete);
arr[i][j] = min;
}
}
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
return arr[word1.length()][word2.length()];
}