https://web.stanford.edu/class/cs124/lec/med.pdf
#include <stdio.h>
#include <stdlib.h>
int min(int a,int b)
{
return a<=b ? a:b;
}
// X and Y index from 1
int ed(char X[] ,int m, char Y[], int n)
{
int **dp = new int*[m+1];
for(int i = 0; i < m+1; i++)
dp[i] = new int[n+1];
for(int j = 0; j < n+1;j++)
dp[0][j] = j;
for(int i = 0; i < m+1; i++)
dp[i][0] = i;
for(int i = 1; i <= m; i++)
{
for(int j = 1; j <= n; j++)
{
dp[i][j] = dp[i-1][j] + 1; // X delete X[i]
dp[i][j] = min(dp[i][j], dp[i][j-1]); // X insert X[i]
if(X[i]==Y[j])
dp[i][j] = min(dp[i][j],dp[i-1][j-1]);
else
dp[i][j] = min(dp[i][j],dp[i-1][j-1] + 2); // replace.
}
}
int result = dp[m+1][n+1];
for(int i = 0; i < m+1; i++)
delete [] dp[i];
delete [] dp;
return result;
}