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
dp[i][j] 表示word1[i] 转换为word2[j]需要的最少操作数!
class Solution {
public:
int minDistance(string word1, string word2) {
int len1 = word1.size();
int len2 = word2.size();
if(!len1 && !len2)return 0;
vector<vector<int> >dp;
vector<int>v;
for(int i = 0; i <= len1; i++)
{
v.clear();
for(int j = 0; j <= len2; j++)
v.push_back(INT_MAX);
dp.push_back(v);
}
dp[0][0] = 0;
if(len1)dp[1][0] = 1;
if(len2)dp[0][1] = 1;
for(int i = 0; i <= len1; i++)
{
for(int j = 0; j <= len2; j++)
{
if(i && j)dp[i][j] = dp[i - 1][j - 1] + (word1[i - 1] == word2[j - 1] ? 0 : 1);
//边界情况保证j - 1 >= 0
//word1[0-i]与word2[0,j-1] 的匹配操作数, 加上删除一个 word2[j]的操作
if(j)dp[i][j] = min(dp[i][j], dp[i][j - 1] + 1);
//边界情况保证i - 1 >= 0
//word1[0,i-1]与word2[0,j] 的匹配操作数, 加上插入一个 word2[j]的操作
if(i)dp[i][j] = min(dp[i][j], dp[i - 1][j] + 1);
}
}
return dp[len1][len2];
}
};