69

« **on:** June 25, 2019, 01:44:48 PM »
`function damerauLevenshteinDistance(%a,%b)`

{

%h = strLen(%a)+1;

%w = strLen(%b)+1;

for(%i=0;%i<%h;%i++)

%a[%i] = getSubStr(%a,%m[%i,0] = %i,1);

for(%i=0;%i<%w;%i++)

%b[%i] = getSubStr(%b,%m[0,%i] = %i,1);

for(%y=1;%y<%h;%y++)

{

for(%x=1;%x<%w;%x++)

{

%c = !(%a[%y-1] $= %b[%x-1]);

%i = %m[%y,%x-1]+1;

%d = %m[%y-1,%x]+1;

%s = %m[%y-1,%x-1]+%c;

if(%s < %d && %s < %i)

%l = %s;

else if(%d < %i)

%l = %d;

else

%l = %i;

if(%x > 1 && %y > 1 && %a[%y-1] $= %b[%x-2] && %a[%y-2] $= %b[%x-1] && (%t = %m[%y-2,%x-2]+%c) < %l)

%l = %t;

%m[%y,%x] = %l;

}

}

return %m[%h-1,%w-1];

}

find the distance between two strings as a numerical value

includes insertion, deletion, substitution, and transpositions

respectively each method is shown below, each of these strings are considered a distance of '1' from eachother

`damerauLevenshteinDistance("abc","abbc");`

`damerauLevenshteinDistance("abc","ac");`

`damerauLevenshteinDistance("abc","axc");`

`damerauLevenshteinDistance("abc","aabc");`

this function clearly becomes slower the longer the strings so make sure to include some sort of limiter and cache results

do not allow a user to enter multiple 255 length strings concatenated together in a serverCmd and then parse them through this function, your server will explode

if you expect this function to be called many times for similar strings consider adding a simple global variable cache array