这是一个简单 match function
的. 它可能没有您的游戏所需的复杂性。该解决方案不需要split
对字符串进行显式处理以获取 DNA“字母”数组。比较 DNA in place
。
将每个“嫌疑人”条目与“证据”条目进行比较。
int idLength = 3;
string evidence = //read from file
List<string> suspects = //read from file
List<double> matchScores = new List<double>();
foreach (string suspect in suspects)
{
int count = 0;
for (int i = idLength; i < suspect.Length; i++)
{
if (suspect[i + idLength] == evidence[i]) count++;
}
matchScores.Add(count * 100 / evidence.Length);
}
该matchScores
列表现在包含所有个人匹配分数。我没有将最大匹配分数保存在单独的变量中,因为可能有多个“嫌疑人”具有相同的分数。要找出最匹配的主题,只需迭代matchScores
列表即可。最佳匹配的索引是嫌疑人在suspects
列表中的索引。
优化说明:
- 您可以检查每个“可疑”字符串以查看 DNA 序列从哪里开始(即在什么索引处),因为它可能是可变的;
- 此处可以使用字典,而不是两个列表,其中“可疑字符串”作为键,匹配分数作为值