【LeetCode】 72. Edit Distance 编辑距离(Hard)(JAVA)

【LeetCode】 72. Edit Distance 编辑距离(Hard)(JAVA)

题目地址: https://leetcode.com/problems/edit-distance/

题目描述:

Given two words word1 and word2, find the minimum number of operations required to convert word1 to word2.

You have the following 3 operations permitted on a word:

1. Insert a character
2. Delete a character
3. Replace a character

Example 1:

Input: word1 = "horse", word2 = "ros"
Output: 3
Explanation: 
horse -> rorse (replace 'h' with 'r')
rorse -> rose (remove 'r')
rose -> ros (remove 'e')

Example 2:

Input: word1 = "intention", word2 = "execution"
Output: 5
Explanation: 
intention -> inention (remove 't')
inention -> enention (replace 'i' with 'e')
enention -> exention (replace 'n' with 'x')
exention -> exection (replace 'n' with 'c')
exection -> execution (insert 'u')

题目大意

给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。

你可以对一个单词进行如下三种操作:

1. 插入一个字符
2. 删除一个字符
3. 替换一个字符

解题方法

1、采用动态规划,定义 dp = new int[len1 + 1][len2 + 2],dp[i][j]表示长度为 i 的 word1 转换成长度为 j 的 word2 最小操作数
2、找出 dp 公式,分别是三种操作:插入、删除和替换,找出这三种操作的最小值;dp[i][j] = Math.min(dp[i][j - 1], Math.min(dp[i - 1][j], dp[i - 1][j - 1])) + 1;

class Solution {
    public int minDistance(String word1, String word2) {
        int[][] dp = new int[word1.length() + 1][word2.length() + 1];
        for (int i = 0; i <= word1.length(); i++) {
            for (int j = 0; j <= word2.length(); j++) {
                if (i == 0) {
                    dp[i][j] = j;
                } else if (j == 0) {
                    dp[i][j] = i;
                } else if (word1.charAt(i - 1) == word2.charAt(j - 1)) {
                    dp[i][j] = dp[i - 1][j - 1];
                } else {
                    dp[i][j] = Math.min(dp[i][j - 1], Math.min(dp[i - 1][j], dp[i - 1][j - 1])) + 1;
                }
            }
        }
        return dp[word1.length()][word2.length()];
    }
}

执行用时 : 7 ms, 在所有 Java 提交中击败了 75.35% 的用户
内存消耗 : 41.7 MB, 在所有 Java 提交中击败了 5.03% 的用户

发布了95 篇原创文章 · 获赞 6 · 访问量 2806

猜你喜欢

转载自blog.csdn.net/qq_16927853/article/details/104939836