Leetcode-Edit Distance(dp)
来源:互联网 发布:简单视频剪辑软件 编辑:程序博客网 时间:2024/06/05 19:33
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)
You have the following 3 operations permitted on a word:
a) Insert a character
b) Delete a character
c) Replace a character
DISCUSS:
This is a classic problem of Dynamic Programming. We define the state dp[i][j]
to be the minimum number of operations to convert word1[0..i - 1]
to word2[0..j - 1]
. The state equations have two cases: the boundary case and the general case. Note that in the above notations, both i
and j
take values starting from 1
.
For the boundary case, that is, to convert a string to an empty string, it is easy to see that the mininum number of operations to convert word1[0..i - 1]
to ""
requires at least i
operations (deletions). In fact, the boundary case is simply:
dp[i][0] = i
;dp[0][j] = j
.
Now let's move on to the general case, that is, convert a non-empty word1[0..i - 1]
to another non-empty word2[0..j - 1]
. Well, let's try to break this problem down into smaller problems (sub-problems). Suppose we have already known how to convert word1[0..i - 2]
to word2[0..j - 2]
, which is dp[i - 1][j - 1]
. Now let's considerword[i - 1]
and word2[j - 1]
. If they are euqal, then no more operation is needed and dp[i][j] = dp[i - 1][j - 1]
. Well, what if they are not equal?
If they are not equal, we need to consider three cases:
- Replace
word1[i - 1]
byword2[j - 1]
(dp[i][j] = dp[i - 1][j - 1] + 1 (for replacement)
); - Delete
word1[i - 1]
andword1[0..i - 2] = word2[0..j - 1]
(dp[i][j] = dp[i - 1][j] + 1 (for deletion)
); - Insert
word2[j - 1]
toword1[0..i - 1]
andword1[0..i - 1] + word2[j - 1] = word2[0..j - 1]
(dp[i][j] = dp[i][j - 1] + 1 (for insertion)
).
Make sure you understand the subtle differences between the equations for deletion and insertion. For deletion, we are actually converting word1[0..i - 2]
to word2[0..j - 1]
, which costs dp[i - 1][j]
, and then deleting the word1[i - 1]
, which costs 1
. The case is similar for insertion.
Putting these together, we now have:
dp[i][0] = i
;dp[0][j] = j
;dp[i][j] = dp[i - 1][j - 1]
, ifword1[i - 1] = word2[j - 1]
;dp[i][j] = min(dp[i - 1][j - 1] + 1, dp[i - 1][j] + 1, dp[i][j - 1] + 1)
, otherwise.
class Solution{public:int minDsitance(string word1,string word2){int m = word1.length(),n = word2.length();vector<vector<int>> dp(m,vector<int>(n,0));for(int i=1;i<=m;i++)dp[i][0] = i;for(int j=1;j<=n;j++)dp[0][j] = j;for(int i=1;i<=m;i++)for(int j=1;j<=n;j++){if(word1[i-1]==word2[j-1])dp[i][j]==dp[i-1][j-1];elsedp[i][j]=min(dp[i-1][j-1]+1,min(dp[i-1][j]+1,dp[i][j-1]+1));}return dp[m][n];};
- Leetcode dp Edit Distance
- [leetcode][DP] Edit Distance
- LeetCode Edit Distance DP
- [LeetCode] Edit Distance(!!!!!DP)
- leetcode---edit-distance---dp
- Leetcode-Edit Distance(dp)
- leetcode -- Edit Distance -- 重点dp
- leetcode 72. Edit Distance DP
- [LeetCode] DP 之 Edit Distance
- Leetcode 72 Edit Distance DP好题
- Leetcode 72 - Edit Distance(dp)
- leetcode 72 Edit Distance(DP)
- 4.Edit Distance【dp】
- 【DP】Edit Distance
- Edit Distance(dp)
- Edit Distance(dp)
- LeetCode: Edit Distance
- LeetCode Edit Distance
- JavaScript学习记录
- 服务器环境搭建(基于阿里云)
- 栈和队列的相互转换
- Spring Boot简单小结
- MyBatis学习笔记(一)
- Leetcode-Edit Distance(dp)
- Preface
- 以下是打招呼内容
- 开始我的漫漫填坑之路
- Java 多线程 (PART XIII) 死锁和检测死锁
- 配置自己的ss服务器(AWS)
- stack布局
- docker registry + docker registry web + docker container web ui
- JAVA8你只需要知道这些(4)