此题和之前的三道题很相近,都是要创建一个二维数组来解。但是注意数组要初始化,因为当前[i][j]是由[i-1][j-1], [i-1][j], [i][j-1]决定,而初始值若放到一个大循环来赋值会很复杂,同时数组长度定义为字符串长度+1。
一定要明白的是我们所定义的数组,[i][j]到底代表的是什么,在我们这里,即字符串a的第i个字符和字符串b的第j个字符的最小编辑次数。那如果,i和j相等,其值必须是由i-1和j-1处得到, 例如mtara和ka。
0 m t a r a
0 0 1 2 3 4 5
k 1 1 2 3 4 5
a 2 2 2 2 3 4
public class Solution {
/**
* @param word1 & word2: Two string.
* @return: The minimum number of steps.
*/
public int minDistance(String word1, String word2) {
// write your co de here
int l1 = word1.length();
int l2 = word2.length();
int[][] matrix = new int[l1 + 1][l2 + 1];
for (int i = 0; i <= l1; i++) {
matrix[i][0] = i;
}
for (int i = 0; i <= l2; i++) {
matrix[0][i] = i;
}
for (int i = 1; i <= l1; i++) {
for (int j = 1; j <= l2; j++) {
int min = Math.min(matrix[i-1][j], matrix[i][j-1]);
min = Math.min(matrix[i-1][j-1], min);
//if (word1.charAt(i) == word2.charAt(j)) {
if (word1.charAt(i - 1) == word2.charAt(j - 1)) {
//matrix[i][j] = min;
matrix[i][j] = matrix[i-1][j-1];
} else {
matrix[i][j] = min + 1;
}
}
}
return matrix[l1][l2];
}
}