leet-code/src/main/java/leetcode/editor/cn/EditDistance.java
2021-08-11 11:22:44 +08:00

80 lines
2.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//给你两个单词 word1 和 word2请你计算出将 word1 转换成 word2 所使用的最少操作数 。
//
// 你可以对一个单词进行如下三种操作:
//
//
// 插入一个字符
// 删除一个字符
// 替换一个字符
//
//
//
//
// 示例 1
//
//
//输入word1 = "horse", word2 = "ros"
//输出3
//解释:
//horse -> rorse (将 'h' 替换为 'r')
//rorse -> rose (删除 'r')
//rose -> ros (删除 'e')
//
//
// 示例 2
//
//
//输入word1 = "intention", word2 = "execution"
//输出5
//解释:
//intention -> inention (删除 't')
//inention -> enention (将 'i' 替换为 'e')
//enention -> exention (将 'n' 替换为 'x')
//exention -> exection (将 'n' 替换为 'c')
//exection -> execution (插入 'u')
//
//
//
//
// 提示:
//
//
// 0 <= word1.length, word2.length <= 500
// word1 和 word2 由小写英文字母组成
//
// Related Topics 字符串 动态规划
// 👍 1750 👎 0
package leetcode.editor.cn;
//72:编辑距离
class EditDistance {
public static void main(String[] args) {
//测试代码
Solution solution = new EditDistance().new Solution();
System.out.println(solution.minDistance("horse", "ros"));
System.out.println(solution.minDistance("intention", "execution"));
}
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
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() + 1; i++) {
dp[i][0] = i;
}
for (int i = 0; i < word2.length() + 1; i++) {
dp[0][i] = i;
}
for (int i = 1; i < word1.length() + 1; i++) {
for (int j = 1; j < word2.length() + 1; j++) {
dp[i][j] = 1 + Math.min(Math.min(dp[i - 1][j], dp[i][j - 1]), word2.charAt(j - 1) == word1.charAt(i - 1) ? dp[i - 1][j - 1] - 1 : dp[i - 1][j - 1]);
}
}
return dp[word1.length()][word2.length()];
}
}
//leetcode submit region end(Prohibit modification and deletion)
}