我在数组中有 voiceResults 来搜索联系人:
Ben McDonald
Ben MacDonald
Ken McDonald
Ken MacDonald
我已经在另一个数组中建立了 potentialMatches (示例):
Ben McDonald
Benjamin MacDonald
Donna McBlead //anagram
Ben Mad
abcdelmno //occurrences in alphabetical order
onmledcba //occurrences in reverse alphabetical order
completely Random
a cannon
BK Lounge
我的目标是确定哪个是用户想要查看的最有可能的联系人。
在循环两个数组时,我想使用与游戏Mastermind类似的逻辑,我可以在其中查看一个字母是“正确但在错误的地方”还是“正确且在正确的地方”。然后我可以将它与元素的 .length() 进行比较,并获得字母匹配和精确位置匹配的浮动百分比。
为此,我不仅需要在数组元素之间循环,还需要按元素的字母分解元素并比较这些单个元素的字母。要建立Mastermind / anagram逻辑,我需要删除匹配的字母,直到剩下不匹配的字母,然后再次将该数量与原始长度进行比较以获得百分比。
查看上面的示例数组数据,我还需要反向执行此操作并吐出名字和姓氏。
对于每个数组,我从以下内容开始:
ArrayList<String> voiceResults = new ArrayList<String>();
ListIterator<String> itr = voiceResults .listIterator();
Arrays.asList(voiceResults.toArray());
while (itr.hasNext()) {
sid = itr.nextIndex();
element = itr.next();
sidpass = sid.toString();
rawpass = element.toString().toLowerCase();
rawpass.trim();
hcs = rawpass.split("\\s");
hnc = hcs.length;
if (hnc == 2) {
fn = hcs[0]; //first name
ln = hcs[1]; //last name
fn = fn.replaceAll("[^a-z]", ""); //remove punctuation
ln = ln.replaceAll("[^a-z]", "");
}
我发布了上述内容,但我确定这不是正确的启动方法。
阅读许多字谜检查和算法的例子,它们变化很大,并使用 for 和 while 循环、哈希图、哈希表、直方图、浮点值等。
我举起双手,我完全不知道最初执行这些循环、内部循环、内部元素循环的最佳/最快/最实用的方法......
如果我能就如何开始构建循环提出一些建议,将不胜感激。
字母比较和反向迭代的进一步建议/示例/链接会很棒。希望那时我能把所有东西拼凑起来。
最后,我应该如何存储这些与元素相关的百分比?
我提前谢谢你。
请注意:尽管示例数据可能另有说明,但我已经使用了循环和 .contains() .matches() 等。