Edit Distance(leetcode)
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
class Solution {
public:
int minDistance(string word1, string word2) {
int len1 = word1.length();
int len2 = word2.length();
if (len1 == 0) return len2;
if (len2 == 0) return len1;
vector<vector<int>> v(len1, vector<int>(len2, 0));
int i, j;
if (word1[0] != word2[0])
v[0][0] = 1;
for (i = 1; i < len1; ++i) {
if (word1[i] == word2[0])
v[i][0] = i;
else if (v[i-1][0] == i-1)
v[i][0] = i;
else
v[i][0] = i+1;
}
for (j = 1; j < len2; ++j) {
if (word2[j] == word1[0])
v[0][j] = j;
else if (v[0][j-1] == j-1)
v[0][j] = j;
else
v[0][j] = j+1;
}
for (i = 1; i < len1; ++i) {
for (j = 1; j < len2; ++j) {
if (word1[i] == word2[j]) {
v[i][j] = v[i-1][j-1];
} else {
v[i][j] = min(v[i-1][j]+1, v[i][j-1]+1);
v[i][j] = min(v[i][j], v[i-1][j-1]+1);
}
}
}
return v[len1-1][len2-1];
}
};