72. 编辑距离
难度困难
给你两个单词 word1
和 word2
,请你计算出将 word1
转换成 word2
所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
- 插入一个字符
- 删除一个字符
- 替换一个字符
示例 1:
1 | 输入:word1 = "horse", word2 = "ros" |
示例 2:
1 | 输入:word1 = "intention", word2 = "execution" |
提示:
0 <= word1.length, word2.length <= 500
word1
和word2
由小写英文字母组成
动态规划
dp[i][j]
代表第一个字符串的第i
个字符到第二个字符串的第j
个字符时,不相同的字符的数量
如果字符串1中的第i个字符与字符串2中的第j个字符不相同时,有三种情况(此时需要选择种操作的最小值):
dp[i-1][j]+1
代表第一个字符串删除一个字符dp[i][j-1]+1
代表第一个字符串插入一个字符dp[i-1][j-1]+1
代表第一个字符串替换了一个字符
如果字符串中的两个字符相同时,不需要处理
- 直接是
dp[i][j] = dp[i-1][j-1]
- 直接是
转移方程的设置
- 如果当前的两个字符串的字符不相同,那么最小值应当是
dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+1)
- 如果当前的两个字符串的字符相同,那么最小值应当是
dp[i][j] = dp[i-1][j-1]
- 边界条件是假设另外的一个字符串为空时,不同的数量
dp[i][0]=i,dp[0][j]=j
,下标从1
开始
记录编辑过程
1 | package leetcode; |
不记录编辑过程
1 | class Solution { |