Skip to content

Instantly share code, notes, and snippets.

@Jalalx
Created July 17, 2019 01:25
Show Gist options
  • Save Jalalx/6126dffa2e2e6a364940babff36da3dd to your computer and use it in GitHub Desktop.
Save Jalalx/6126dffa2e2e6a364940babff36da3dd to your computer and use it in GitHub Desktop.
Damerau Leveneshtein Distance algorithm in C# (idea from https://www.youtube.com/watch?v=MiqoA-yF-0M)
using System;
namespace DamerauLeveneshteinDistanceCalculator
{
static class Program
{
public static int ComputeDamerauLeveneshteinDistance(string a, string b)
{
if (string.IsNullOrEmpty(a) && string.IsNullOrEmpty(b))
return 0;
if (!string.IsNullOrEmpty(a) && string.IsNullOrEmpty(b))
return a.Length;
if (string.IsNullOrEmpty(a) && !string.IsNullOrEmpty(b))
return b.Length;
var rows = a.Length + 1;
var columns = b.Length + 1;
var matrix = new int[rows, columns];
for (var r = 0; r < rows; r++) matrix[r, 0] = r;
for (var c = 0; c < columns; c++) matrix[0, c] = c;
for (int c = 1; c < columns; c++)
{
for (int r = 1; r < rows; r++)
{
if (a[r - 1] == b[c - 1])
{
matrix[r, c] = matrix[r - 1, c - 1];
}
else
{
var replace = matrix[r - 1, c - 1];
var insertion = matrix[r - 1, c];
var deletion = matrix[r, c - 1];
matrix[r, c] = Math.Min(replace, Math.Min(insertion, deletion)) + 1;
}
}
}
return matrix[rows - 1, columns - 1];
}
static void Main()
{
Console.WriteLine($"ali, alireza: {ComputeDamerauLeveneshteinDistance("ali", "alireza")}");
Console.WriteLine($"jalal, kamal: {ComputeDamerauLeveneshteinDistance("jalal", "kamal")}");
Console.WriteLine($"mohammad, mammad: {ComputeDamerauLeveneshteinDistance("mohammad", "mammad")}");
Console.WriteLine($"jalal, jalal: {ComputeDamerauLeveneshteinDistance("jalal", "jalal")}");
Console.ReadKey();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment