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 {
int min3(int a, int b, int c)
{
int tmp = a <= b? a:b;
if (tmp <= c)
return tmp;
return c;
}
public:
int minDistance(string word1, string word2) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int size1 = word1.size();
int size2 = word2.size();
if (size1 == 0 && size2 == 0)
return 0;
else if (size1 == 0)
return size2;
else if (size2 == 0)
return size1;
int **table = (int **)malloc(sizeof(int*)*(size2+1));
for (int i = 0; i <= size2; i++)
{
table[i] = (int *)malloc(sizeof(int)*(size1+1));
memset(table[i], 0, size1+1);
}
table[0][0] = 0;
for (int i = 1; i<=size2; i++)
table[i][0] = i;
for (int j = 1; j<=size1; j++)
table[0][j] = j;
for (int i = 1; i<=size2; i++)
{
for(int j = 1; j<=size1; j++)
{
if (word1[j-1] == word2[i-1])
{
table[i][j] = table[i-1][j-1];
}
else
{
table[i][j] = min3(table[i-1][j], table[i][j-1], table[i-1][j-1])+1;
}
}
}
int retVal = table[size2][size1];
for (int i = 0; i < size2; i++)
{
free(table[i]);
}
free(table);
return retVal;
}
};