110,561
社区成员
发帖
与我相关
我的任务
分享
List<string> list = new List<string>();
list.Add("Zhangsan");
list.Add("LisiZhangsan");
list.Add("Zhangsi");
list.Add("张三");
list.Add("李四");
list.Add("王五");
list.Add("王六");
list.Add("Lisi");
list.Add("zhang");
static void Main(string[] args)
{
List<string> list = new List<string>();
list.Add("Zhangsan");
list.Add("LisiZhangsan");
list.Add("Zhangsi");
list.Add("张三");
list.Add("李四");
list.Add("王五");
list.Add("王六");
list.Add("Lisi");
list.Add("zhang");
var s = "zhang";
var r = list.FindAll(x => x.ToLower().Contains(s.ToLower())).OrderBy(x=>LevenshteinDistance(x,s));
Console.WriteLine(string.Join("\r\n", r));
}
//最小编辑距离
public static int LevenshteinDistance(string s1, string s2)
{
if (s1 == s2)
return 0;
else if (String.IsNullOrEmpty(s1))
return s2.Length;
else if (String.IsNullOrEmpty(s2))
return s1.Length;
var m = s1.Length + 1;
var n = s2.Length + 1;
var d = new int[m, n];
// Step1
for (var i = 0; i < m; i++) d[i, 0] = i;
// Step2
for (var j = 0; j < n; j++) d[0, j] = j;
// Step3
for (var i = 1; i < m; i++)
{
for (var j = 1; j < n; j++)
{
var cost = s1[i - 1] == s2[j - 1] ? 0 : 1;
var deletion = d[i - 1, j] + 1;
var insertion = d[i, j - 1] + 1;
var substitution = d[i - 1, j - 1] + cost;
d[i, j] = Math.Min(Math.Min(deletion, insertion), substitution);
}
}
return d[m - 1, n - 1];
}