2013-10-17 76 views
-2

以下是在一次采访中向我询问的问题。 我们知道食物的一种是:茶和吃 现在的问题是: 我们有一个程序。我们向该计划提供一万个字母的列表。 我们运行该程序。 现在在运行时,我们为这个程序提供一个词,例如。 “eat” 现在程序应该返回一万个字母列表中存在的anagrams的数量。因此,对于“吃”的输入,它应该返回2.查找数量的字典

什么将是存储那些10000个字母,以便找到字谜的数量变得容易策略。

+1

我把我的床垫放在床下 –

+0

您的意思是10000字或字母?英语中只有1个英文字母从字母a到z –

+1

你尝试过什么?请详细说明您想到的一个或两个DS,以及为什么您认为它们不够好。 – amit

回答

1

令每个单词的字母,以减少它的排序规则,即tea变得aet

然后,只需把这些单词中的一个(哈希)地图计数(包括teaate映射到aet,所以我们会在地图上有(aet, 2)

然后,当你得到一个字,重新排序如上所述的字母,并对count进行查找。

运行时间:

假设n词语的列表,以及m的平均字长...

预计O(nm log m)预处理,预计O(m log m)每次查询。

这是m log m上,我们只是做一个简单的排序一个单词的字母的假设。

每个查询所花费的时间预计将在列表中的字的数量的影响(即,哈希映射就给预期O(1)查找时间)。

+1

单词的长度在复杂性中应该考虑到,不是吗?由于只有26个可能的字母,可以在O(k)中完成,其中k是具有计数排序的单词的长度,但仍然是。 – Traklon

+0

@Traklon是的,补充说。 – Dukeling

+0

我试图使用蛮力方法O(n3) – user1001254