Edit Distance
Total Accepted: 58999
Total Submissions: 204641
Difficulty: Hard
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
Subscribe to see which companies asked this question
Hide Similar Problems
思路:动规
设:word1="abcd",word2="bbc"。
则其状态转移过程为:
Ø a b c d
Ø 0 1 2 3 4
b 1 1 1 2 3
b 2 2 1 2 3
c 3 3 2 1 2
其状态转移方程为:
dp[i][j] = dp[i-1][j-1], if word1[i-1]==word2[j-1];
dp[i][j] = min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1, otherwise;
c++ code:
/*
Ø a b c d
Ø 0 1 2 3 4
b 1 1 1 2 3
b 2 2 1 2 3
c 3 3 2 1 2
*/
class Solution {
public:
int minDistance(string word1, string word2) {
int m = word1.length();
int n = word2.length();
int dp[m+1][n+1];
for(int i=0;i<=m;i++) dp[i][0] = i; // 初始化第一列
for(int j=0;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];
else
dp[i][j] = min3(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]) + 1;
}
}
return dp[m][n];
}
// 自定义函数
int min3(int x, int y,int z) {
return min(x,min(y,z));
}
};