https://stackoverflow.com/a/40775015
Ahk
Code: Select all
LD(source, target) {
if (source = target)
return 0
if !(lens := StrLen(source))
return 0
if !(lent := StrLen(target))
return 0
v0 := []
v1 := []
Loop lent + 1
v0.Push(A_Index - 1)
Loop lens {
v1.Push(A_Index)
i := A_Index
Loop lent
{
cost := (SubStr(source, i, 1) = SubStr(target, A_Index, 1)) ? 0 : 1
if v1.Length < A_Index + 1
v1.Push("")
v1[A_Index + 1] := Min(v1[A_Index] + 1, Min(v0[A_Index + 1] + 1, v0[A_Index] + cost))
}
Loop lent + 1
v0[A_Index] := v1[A_Index]
}
return v1[lent + 1]
}