给定一个任意长度的字符串值,你应该确定彼此字谜的单词的频率。
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个字符串。谢谢。
答案 0 :(得分:1)
我在Extract keyphrases from text (1-4 word ngrams)编写了一个创建n-gram(单词分析)的JavaScript实现。
可以轻松更改此功能以分析字谜的频率:
将s = text[i];
替换为s = text[i].sort()
,以便字符的顺序无关紧要。
答案 1 :(得分:1)
通过按字母顺序对字母进行排序,为每个单词创建“签名”。按照签名对单词进行排序。按顺序运行排序列表;如果签名与之前的签名相同,则您有一个字谜。