题目:
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[m][n]。
DP[i][j]表示word1[0...i]到word1[0...j]之间需要编辑的步骤。
则满足下面的关系:
word1[i-1]==word2[j-1],则DP[i][j]=DP[i-1][j-1]
插入元素,DP[i][j]=DP[i-1][j]
删除元素,DP[i][j]=DP[i][j-1]
int minDistance(string word1, string word2) {
// DP talbe, i is the position in word1, and j is the position in word2
vector<vector<int>> distance(word1.length()+1, vector<int>(word2.length()+1, 0));
for(int i=0; i<distance.size(); i++)
for(int j=0; j< distance[0].size();j++){
if(i == 0)
distance[i][j] = j;
else if(j == 0)
distance[i][j] = i;
}
for(int i=1; i< distance.size(); i++)
for(int j=1; j<distance[0].size(); j++){
if(word1[i-1] == word2[j-1])
distance[i][j] = distance[i-1][j-1];
else
distance[i][j] = 1+ min(distance[i-1][j-1], min(distance[i-1][j], distance[i][j-1]));
}
return distance[word1.length()][word2.length()];
}