擅长:python、mysql、java
<p>用一本冻疮辞典怎么样?Frozensets是不可变的,这意味着您可以对它们进行散列以进行常量查找。当涉及到字谜时,两个单词之间的字谜是因为它们有相同的字母和相同的计数。因此,您可以构造一个{(letter,count),…}对的冻结集,并对其进行散列以实现高效的查找。你知道吗</p>
<p>下面是一个使用<code>collections.Counter</code>将单词转换为多集的快速小函数:</p>
<pre><code>from collections import Counter, defaultdict
def word2multiset(word):
return frozenset(Counter(word).items())
</code></pre>
<p>现在,给定一个单词列表,按如下方式填充你的字谜字典:</p>
<pre><code>list_of_words = [... ]
anagram_dict = defaultdict(set)
for word in list_of_words:
anagram_dict[word2multiset(word)].add(word)
</code></pre>
<p/>
<p>例如,当<code>list_of_words = ['hello', 'olleh', 'test', 'apple']</code>运行上述循环后,这是<code>anagram_dict</code>的输出:</p>
<pre><code>print(anagram_dict)
defaultdict(set,
{frozenset({('e', 1), ('h', 1), ('l', 2), ('o', 1)}): {'hello',
'olleh'},
frozenset({('e', 1), ('s', 1), ('t', 2)}): {'test'},
frozenset({('a', 1), ('e', 1), ('l', 1), ('p', 2)}): {'apple'}})
</code></pre>