Java anagram finder 算法
Posted
技术标签:
【中文标题】Java anagram finder 算法【英文标题】:Java anagram finder algorithm 【发布时间】:2012-03-08 11:07:23 【问题描述】:我在 Java 中有一个 Strings
数组。我需要从数组中找到字谜并将它们打印到屏幕上。
我在应该比较数组元素以检查它们是否是字谜的部分遇到困难。我该怎么做?显然,我必须创建一个循环来遍历数组。
我认为我可以对String
s 进行排序然后比较它们(因为如果它们是字谜,它们在排序时会以相同的顺序包含相同的字母),但是我将如何对它们进行排序以获得原始单词?
【问题讨论】:
【参考方案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
中有 List
s 只有 1 个条目,您可以从地图中删除这些以保留 Map
那些在你的字典中有其他字谜的人......
【讨论】:
刚刚接受了亚马逊的电话采访,这正是他们提出的问题。如果你有超过 10 分钟的时间来解决这个有趣的问题。【参考方案2】:您可以使用Map
将有序的String
映射到数组索引的Collection
,这些索引是有序String
的变位词。
【讨论】:
以上是关于Java anagram finder 算法的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode算法题-Valid Anagram(Java实现)