以下是在其中一次采访中向我询问的问题。 我们知道吃的字谜是:茶和吃 问题是: 我们有一个计划。我们为这个程序提供了一万个字母表。 我们运行该程序。 现在,在运行时,我们为此程序提供了一个词,例如。 “吃” 现在程序应该返回万字母列表中存在的字谜数量。因此,对于“吃”的输入,它应该返回2.
存储这些万字母的策略是什么,以便找到字谜的数量变得容易。
答案 0 :(得分:1)
订购每个单词的字母以最小化其排序,即tea
变为aet
。
然后只需将这些字词放入(哈希)字词映射中(tea
和ate
映射到aet
,这样我们就可以(aet, 2)
了地图)
然后,当你得到一个单词时,重新排序上面的字母并查找计数。
运行时间:
假设列表中有n
个字词,平均字长为m
...
预期O(nm log m)
预处理,每个查询预期O(m log m)
。
m log m
假设我们只是简单地写了一个单词的字母。
预计每个查询所花费的时间不受列表中单词数量的影响(即哈希映射会给出预期的O(1)
查找时间)。