动态规划 - 编辑距离
作者: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 加入
还未添加个人简介









评论