题目地址(72. 编辑距离)
Posted 潜行前行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题目地址(72. 编辑距离)相关的知识,希望对你有一定的参考价值。
题目地址(72. 编辑距离)
https://leetcode-cn.com/problems/edit-distance/
题目描述
给你两个单词 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 由小写英文字母组成
关键点
- 依赖前缀的状态 dp[i-1][j-1]:替换 dp[i-1][j]: 插入 dp[i][j-1]: 删除
代码
- 语言支持:Java
Java Code:
class Solution
public int minDistance(String word1, String word2)
int len1 = word1.length();
int len2 = word2.length();
int dp[][] = new int[len1+1][len2+1]; // dp[i][j] word1前i个字符 转化为 word2前j 个字符需要的最小值。需要把空字符串考虑到,长度要加+1
for(int i=1;i<len1+1;i++) dp[i][0] = dp[i-1][0] + 1;
for(int i=1;i<len2+1;i++) dp[0][i] = dp[0][i-1] + 1;
for(int i=1;i<len1+1;i++)
for(int j=1;j < len2+1;j++)
if(word1.charAt(i-1) == word2.charAt(j-1))
dp[i][j] = dp[i-1][j-1];
else
dp[i][j] = Math.min(Math.min(dp[i-1][j],dp[i-1][j-1]),dp[i][j-1]) +1; // dp[i-1][j-1] 替换 dp[i-1][j] 插入 dp[i][j-1] 删除
return dp[len1][len2];
以上是关于题目地址(72. 编辑距离)的主要内容,如果未能解决你的问题,请参考以下文章