动态规划 - 编辑距离
作者:wing
- 2022 年 9 月 06 日 北京
本文字数:770 字
阅读完需:约 3 分钟
给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
插入一个字符
删除一个字符
替换一个字符
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/edit-distance
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public int minDistance(String word1, String word2) {
if (isNull(word1) && isNull(word2)) {
return 0;
}
if (isNull(word1)) {
return word2.length();
}
if (isNull(word2)) {
return word1.length();
}
int l1 = word1.length();
int l2 = word2.length();
int[][] arr = new int[l1 + 1][l2 + 1];
// 初始化
for (int i = 0; i < l1 + 1; ++i) {
arr[i][0] = i;
}
// 初始化
for (int i = 0; i < l2 + 1; ++i) {
arr[0][i] = i;
}
// 通过状态转移方程寻找最优解
for (int i = 1; i < l1 + 1; ++i) {
for (int j = 1; j < l2 + 1; ++j) {
if (word1.charAt(i - 1) == word2.charAt(j - 1)) {
// 相同
arr[i][j] = Math.min(Math.min(arr[i - 1][j] + 1, arr[i][j - 1] + 1), arr[i - 1][j - 1]);
} else {
arr[i][j] = Math.min(Math.min(arr[i - 1][j] + 1, arr[i][j - 1] + 1), arr[i - 1][j - 1] + 1);
}
}
}
return arr[l1][l2];
}
private boolean isNull(String str) {
return "".equals(str) || null == str;
}
}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 2
wing
关注
还未添加个人签名 2018.05.13 加入
还未添加个人简介
评论