Damerau – Levenshtein distancia (Editar distancia con transposición) c implementación

Implementé la distancia Damerau-Levenshtein en c ++ pero no da o / p correcta para la entrada (pantera, aorta), la o / p correcta es 4 pero mi código da 5 ...

int  editdist(string s,string t,int n,int m) 
{
    int d1,d2,d3,cost;
    int i,j;
    for(i=0;i<=n;i++) 
    {
        for(j=0;j<=m;j++)
        {
          if(s[i+1]==t[j+1]) 
              cost=0;
          else
              cost=1;
          d1=d[i][j+1]+1;
          d2=d[i+1][j]+1;
          d3=d[i][j]+cost;
          d[i+1][j+1]=minimum(d1,d2,d3);
          if(i>0 && j>0 && s[i+1]==t[j] && s[i]==t[j+1] )   //transposition
          {
              d[i+1][j+1]=min(d[i+1][j+1],d[i-1][j-1]+cost);
          }
        }
    }
    return d[n+1][m+1]; 
}

No veo ningún error. ¿Alguien puede encontrar un problema con el código?

Respuestas a la pregunta(3)

Su respuesta a la pregunta