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
Accept: 12ms
int dp[1000][1000];
int findDist(char *word1, size_t len1, char *word2, size_t len2) {
if (dp[len1][len2] != 0) {
return dp[len1][len2];
}
if (*word1 == '\0') {
dp[0][len2] = len2;
return dp[0][len2];
} else if (*word2 == '\0') {
dp[len1][0] = len1;
return dp[len1][0];
}
if (*word1 == *word2) {
dp[len1][len2] = findDist(word1+1, len1-1, word2+1, len2-1);
return dp[len1][len2];
}
// REPLACE
int d1 = 1 + findDist(word1+1, len1-1, word2+1, len2-1);
// DELETE
int d2 = 1 + findDist(word1+1, len1-1, word2, len2);
// INSERT
int d3 = 1 + findDist(word1, len1, word2+1, len2-1);
int m = d1;
if (d1 < d2) {
if (d1 < d3) {
m = d1;
} else {
m = d3;
}
} else {
if (d2 < d3) {
m = d2;
} else {
m = d3;
}
}
dp[len1][len2] = m;
return dp[len1][len2];
}
int minDistance(char *word1, char *word2) {
size_t len1 = strlen(word1);
size_t len2 = strlen(word2);
for (size_t i = 0; i <= len1; ++i) {
for (size_t j = 0; j <= len2; ++j) {
dp[i][j] = 0;
}
}
return findDist(word1, len1, word2, len2);
}