Skip to content

Instantly share code, notes, and snippets.

@ArseniySavin
Created July 11, 2018 06:46
Show Gist options
  • Save ArseniySavin/636fbe31f515a1bf0169fe58edd6d023 to your computer and use it in GitHub Desktop.
Save ArseniySavin/636fbe31f515a1bf0169fe58edd6d023 to your computer and use it in GitHub Desktop.
class Program
{
static void Main(string[] args)
{
string val1 = "Savin Arseni".ToUpper();
string val2 = "Arseniy Savin".ToUpper();
int res = GetLevensteinDistance(val1, val2);
Console.WriteLine(res);
Console.ReadKey();
}
/// <summary>
/// Get distance different val1 between val2
/// </summary>
/// <returns>Calculate Levenstein distance for val1 and val2.
/// Where distance show different percent after compare strings.</returns>
static int GetLevensteinDistance(string val1, string val2)
{
int result = 0;
int arg1Length = val1.Length;
int arg2Length = val2.Length;
int[,] table = new int[arg1Length + 1, arg2Length + 1];
for (int i = 0; i <= arg1Length; i++)
table[i, 0] = i;
for (int i = 0; i <= arg2Length; i++)
table[0, i] = i;
for (int i = 0; i < arg1Length; i++)
{
for (int j = 0; j < arg2Length; j++)
{
int diff = val1[i].Equals(val2[j]) ? 0 : 1;
var segment1 = table[i, j + 1] + 1;
var segment2 = table[i + 1, j] + 1;
var diffSegment = table[i, j] + diff;
var minSement2 = Math.Min(segment2, diffSegment);
var minSement1 = Math.Min(segment1, minSement2);
table[i + 1, j + 1] = minSement1;
}
}
result = table[arg1Length, arg2Length];
return result;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment