【发布时间】:2014-08-13 23:20:27
【问题描述】:
我想使用 Damerau 到 Levenshtein 距离来比较字符串列表
目前我有:
char lastchar = (char)('z'+1);
SimilarStrings similarStrings = new SimilarStrings();
List<String> listString = new List<string>();
listString.Add("Rammstein");
listString.Add("Ramstein");
listString.Add("Rammsten");
listString.Add("Metallica");
listString.Add("Metalica");
listString.Add("Metaica");
for (int i = 0; i < listString.Count(); i++)
{
for(int n = 0; n < listString.Count(); n++)
{
String str1 = String.Copy(listString[i]);
String str2 = String.Copy(listString[n]);
Console.Write(str1); Console.Write(" to "); Console.Write(str2 + "\n");
int DADistance = SimilarStrings.damerauLevenshteinDistance(str1, str2, (int)lastchar);
Console.WriteLine(DADistance);
}
}
这基本上可以正常工作,唯一的问题是每次比较都进行了两次。这意味着例如将“Rammstein”与“Metallica”进行比较,然后将“Metallica”再次与“Rammstein”进行比较。一半的比较就足够了。但是我该如何以一种好的方式做到这一点呢?我只能想一些复杂的方法。
【问题讨论】: