给定一个字符串数组,返回所有属于字谜词的字符串组。
我的解决方案:
对于数组中的每个字符串单词,对其进行排序 O(m lg m),m 是单词的平均长度。
建立一个哈希表。
将排序后的单词作为键放入哈希表中,并生成该单词的所有排列(O(m!)),如果字典中存在每个排列,则使用 O(m) 在字典(前缀树映射)中搜索每个排列,将 (O(1)) 它放入哈希表中,以便所有排列后的单词都放入具有相同键的列表中。
总共,时间为 O(n * m * lg m * m!) ,空间为 O(n* m!) ,n 是给定数组的大小。
如果m很大的话,效率不高,m! 。
还有更好的解决方案吗?
thanks
我们定义一个字母表,其中包含单词列表中可能存在的每个字母。接下来,我们需要为字母表中的每个字母使用不同的素数,我建议使用您能找到的最小素数。
这将为我们提供以下映射:
{ a => 2、b => 3、c => 5、d => 7 等 }
现在计算要表示为整数的单词中的字母,并按如下方式构建结果整数:
伪代码:
result = 1
for each letter:
....result *= power(prime[letter], count(letter,word)
一些例子:
啊啊=> 2^4
aabb => 2^2 * 3^2 = bbaa = 巴巴 = ...
等等。
因此,您将有一个代表字典中每个单词的整数,并且您要检查的单词将能够转换为整数。因此,如果 n 是单词列表的大小,k 是最长单词的大小,则构建新字典需要 O(nk) 时间,检查新单词需要 O(k) 时间。
Hackthissite.com 面临的编程挑战是:给定一个乱序的单词,在字典中查找它,看看字典中是否有它的字谜词。有一个好文章 http://www.hackthissite.org/articles/read/1081关于我借用答案的问题的有效解决方案,它还详细介绍了进一步的优化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)