public class Solution {
/**
* @param word1 & word2: Two string.
* @return: The minimum number of steps.
*/
public int minDistance(String word1, String word2) {
// 2015-05-20
if (word1 == null || word2 == null) {
return 0;
}
int m = word1.length();
int n = word2.length();
int[][] min = new int[m + 1][n + 1];
for (int i = 0; i <= m; i++) {
min[i][0] = i;
}
for (int j = 1; j <= n; j++) {
min[0][j] = j;
}
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (word1.charAt(i - 1) == word2.charAt(j - 1)) {
min[i][j] = min[i - 1][j - 1];
} else {
min[i][j] = Math.min(min[i][j - 1] + 1, min[i - 1][j] + 1);
min[i][j] = Math.min(min[i][j], min[i - 1][j - 1] + 1);
}
}
}
return min[m][n];
}
}
当最后一个字符不同时对应三种情况,举例:
mart ->karma 有三种情况
1. mart -> karm_ + 增
2. mar_ -> karma + 删
3. mar_ -> karm_ + 改
本文详细介绍了解决字符串编辑距离问题的一种经典算法实现。该算法通过构建二维动态规划表来计算两个字符串之间的最小编辑距离,即从一个字符串转换为另一个字符串所需的最少操作数(包括插入、删除和替换)。文中通过具体的例子解释了不同情况下算法的操作步骤。
2984

被折叠的 条评论
为什么被折叠?



