119. Edit Distance
Tag:
Dynamic Problem
Main Idea:
DP-Match Problem.
- State:
dp[i][j] : the minimum number of steps of converting s1(0,i) to s2(0, j). - Update Function:
IF s1[i] == s2[j], THEN dp[i][j] = min(dp[i-1][j-1], 1+min(dp[i-1][j], dp[i][j-1]));
ELSE, dp[i][j] = 1 + min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]). - Initialization:
- dp[i][0] =i
- dp[0][j] =j
- Answer:
dp[n][m]
Tips/Notes:
Time/Space Cost:
Time Cost:
Space Cost:
Code:
class Solution {
public:
/**
* @param word1: A string
* @param word2: A string
* @return: The minimum number of steps.
*/
int minDistance(string &word1, string &word2) {
// write your code here
int n = word1.length();
int m = word2.length();
vector<vector<int>> dp(n+1, vector<int>(m+1, 0));
for(int i = 0; i <= n; i++){
dp[i][0] = i;
}
for(int j = 0; j <= m; j++){
dp[0][j] = j;
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(word1[i-1] == word2[j-1])
dp[i][j] = min(dp[i-1][j-1], 1 + min(dp[i-1][j], dp[i][j-1]));
else
dp[i][j] = 1 + min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1]));
}
}
return dp[n][m];
}
};