Java anagram finder 算法

Posted

技术标签:

【中文标题】Java anagram finder 算法【英文标题】:Java anagram finder algorithm 【发布时间】:2012-03-08 11:07:23 【问题描述】:

我在 Java 中有一个 Strings 数组。我需要从数组中找到字谜并将它们打印到屏幕上。

我在应该比较数组元素以检查它们是否是字谜的部分遇到困难。我该怎么做?显然,我必须创建一个循环来遍历数组。

我认为我可以对Strings 进行排序然后比较它们(因为如果它们是字谜,它们在排序时会以相同的顺序包含相同的字母),但是我将如何对它们进行排序以获得原始单词?

【问题讨论】:

【参考方案1】:

如果你按字母顺序排列字母而不是散列它们,它们应该是相同的......

Map<String, List<String>> words = new HashMap<String, List<String>>();
for(String word : incomingWords) 
   final String key = alphabetize(word);
   if(words.contains(key))
      words.get(key).add(word);
    else 
      words.put(key, new ArrayList<String>());
      words.get(key).add(word);
   

现在您有 Map 的字谜...您还将在 Map 中有 Lists 只有 1 个条目,您可以从地图中删除这些以保留 Map那些在你的字典中有其他字谜的人......

【讨论】:

刚刚接受了亚马逊的电话采访,这正是他们提出的问题。如果你有超过 10 分钟的时间来解决这个有趣的问题。【参考方案2】:

您可以使用Map 将有序的String 映射到数组索引的Collection,这些索引是有序String 的变位词。

【讨论】:

以上是关于Java anagram finder 算法的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode算法题-Valid Anagram(Java实现)

LeetCode算法题-Find All Anagrams in a String(Java实现)

算法训练 Anagrams问题

Anagram 算法目标 C

我怎样才能加快这个 Anagram 算法

swift Swift中anagram算法的例子