Skip to content

Instantly share code, notes, and snippets.

@travisperson
Forked from whyrusleeping/revised algorithm in c
Created December 1, 2012 22:13
Show Gist options
  • Save travisperson/4185567 to your computer and use it in GitHub Desktop.
Save travisperson/4185567 to your computer and use it in GitHub Desktop.
fuzzy string comp
function compStr(a, b)
{
return lcSubString2(a, b)/(a.length > b.length ? a.length : b.length);
}
function lcSubString2(_a, _b)
{
var max = "";
var maxai = 0;
var maxbi = 0;
var substr = "";
for (var i = 0; i < _a.length; i++)
{
for (var j = 0; j < _b.length; j++)
{
substr = "";
for (var k = 0; i + k < _a.length && j + k < _b.length; k++)
{
if (_a[i + k] == ' ' || _b[j + k] == ' ')
break;
if (_a[i + k] == _b[j + k])
{
substr += _a[i + k];
}
else
{
break;
}
if (substr.length > max.length)
{
max = substr;
maxai = i;
maxbi = j;
}
}
}
}
var minusa = _a.replace(max, ' ')
var minusb = _b.replace(max, ' ')
var retval = max.length;
if (minusa.length > 1 && minusb.length > 1 && max.length > 0)
retval += lcSubString2(minusa, minusb);
return retval;
}
public double compStr(string a, string b)
{
return (double)lcSubString2(a, b)/(a.Length > b.Length ? a.Length : b.Length);
}
public int lcSubString2(string _a, string _b)
{
string max = "";
int maxai = 0;
int maxbi = 0;
string substr = "";
for (int i = 0; i < _a.Length; i++)
{
for (int j = 0; j < _b.Length; j++)
{
substr = string.Empty;
for (int k = 0; i + k < _a.Length && j + k < _b.Length; k++)
{
if (_a[i + k] == ' ' || _b[j + k] == ' ')
break;
if (_a[i + k] == _b[j + k])
{
substr += _a[i + k];
}
else
{
break;
}
if (substr.Length > max.Length)
{
max = substr;
maxai = i;
maxbi = j;
}
}
}
}
string string1_part1 = _a.Substring(0, _a.IndexOf(max));
string string1_part2 = _a.Substring(_a.IndexOf(max) + max.Length, _a.Length - (_a.IndexOf(max) + max.Length));
string minusa = string1_part1 + " " + string1_part2;
string1_part1 = _b.Substring(0, _b.IndexOf(max));
string1_part2 = _b.Substring(_b.IndexOf(max) + max.Length, _b.Length - (_b.IndexOf(max) + max.Length));
string minusb = string1_part1 + " " + string1_part2;
int retval = max.Length;
if (minusa.Length > 1 && minusb.Length > 1 && max.Length > 0)
retval += lcSubString2(minusa, minusb);
return retval;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment