【问题标题】:Finding number of anagrams [closed]查找字谜的数量[关闭]
【发布时间】:2013-10-17 07:56:27
【问题描述】:

以下是我在一次采访中被问到的一个问题。 我们知道吃的字谜是:茶和吃 问题是: 我们有一个程序。我们向这个程序提供了一个包含 10,000 个字母的列表。 我们运行程序。 现在在运行时,我们为这个程序提供一个词,例如。 “吃” 现在程序应该返回 10,000 个字母列表中存在的字谜的数量。因此,对于“吃”的输入,它应该返回 2。

存储这 10,000 个字母的策略是什么,以便查找字谜的数量变得容易。

【问题讨论】:

  • 我的放在床垫下
  • 您的意思是 10000 个单词或字母?从字母 a 到 z 的英文字母只有 1 个
  • 你尝试了什么?请详细说明您想到的一两个 DS,以及为什么您认为它们不够好。
  • 计算每个单词的字母并将配对(数组,出现次数)存储在排序结构或哈希图中可能会更容易和更快。
  • 您可以通过将 26 个英文字符中的每一个映射到一个唯一的素数来执行一个非常快速的算法。之后,您计算字符串的乘积。根据算术基本定理,当且仅当它们的乘积相同时,两个字符串才是字谜。

标签: algorithm


【解决方案1】:

对每个单词的字母进行排序以使其最小化,即tea变为aet

然后简单地将它们放在单词到计数的(散列)映射中(teaate 都映射到 aet,所以我们将在映射中包含 (aet, 2)

然后,当你得到一个单词时,像上面一样重新排列字母并查找计数。

运行时间:

假设列表中有n字,平均字长为m...

预期 O(nm log m) 预处理,预期 O(m log m) 每个查询。

它是m log m,假设我们只是对单词的字母进行简单排序。

每个查询所用的时间预计不受列表中单词数量的影响(即哈希图给出预期的O(1) 查找时间)。

【讨论】:

  • 复杂度中应该考虑单词的长度,不是吗?鉴于只有 26 个可能的字母,它可以在 O(k) 中完成,其中 k 是带有计数排序的单词的长度,但仍然。
  • 我尝试过使用蛮力方法O(n3)
  • 不知何故我无法在这篇文章中添加任何其他回复。为什么这样?我想把我自己尝试过的决议放在这篇文章中。但这个帖子似乎被搁置了。请取消保留,以便我可以发布我的部分解决方案。
  • 我想把我自己尝试过的解决方案放在这篇文章中。但这个帖子似乎被搁置了。请取消保留,以便我可以发布我的部分解决方案。
  • @user1001254 您可以编辑您的问题并将尝试的解决方案添加到那里。
猜你喜欢
  • 2012-10-11
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 2016-03-18
  • 2011-12-07
  • 2011-02-07
  • 2011-10-01
相关资源
最近更新 更多