写点什么

动态规划 - 编辑距离

作者: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;    }}
复制代码


用户头像

wing

关注

还未添加个人签名 2018.05.13 加入

还未添加个人简介

评论

发布
暂无评论
动态规划-编辑距离_wing_InfoQ写作社区