如何在字符串中找到anagram频率?

时间:2011-10-02 20:46:50

标签: algorithm anagram

给定一个任意长度的字符串值,你应该确定彼此字谜的单词的频率。

public static Map<String, Integer> generateAnagramFrequency(String str)
{ ... }

例如:如果字符串是“在购买车和dna trac的老鼠中找到艺术品” 你的输出应该是一张地图:     找到 - &gt; 1     艺术 - &gt; 2     in - &gt; 1     a - &gt; 1     购物车 - &gt; 2     和 - &gt; 2

键应该是单词的第一次出现,数字是该单词的字谜数,包括其自身。

我提出的解决方案就是对所有单词进行排序,并将两个字符串中的每个字符进行比较,直到任一字符串结束。它将是O(logn)。我正在寻找一些其他有效的方法,它不会改变被比较的2个字符串。谢谢。

2 个答案:

答案 0 :(得分:1)

我在Extract keyphrases from text (1-4 word ngrams)编写了一个创建n-gram(单词分析)的JavaScript实现。

可以轻松更改此功能以分析字谜的频率:
s = text[i];替换为s = text[i].sort(),以便字符的顺序无关紧要。

答案 1 :(得分:1)

通过按字母顺序对字母进行排序,为每个单词创建“签名”。按照签名对单词进行排序。按顺序运行排序列表;如果签名与之前的签名相同,则您有一个字谜。