【发布时间】:2021-01-31 04:20:06
【问题描述】:
我正在解决 HackerRank 的一个问题 - 我有一个有效的字谜搜索功能,但是,当涉及到大型输入数组/字符串时,它太慢了。
dictionary 和 query 输入都是单词列表,该函数应在 query 中查找每个单词的字谜数,并返回每个字对应的字谜计数列表。
dictionary = ["abc", "bca"]
query = ["abc", "xyz"]
# return [2, 0]
我尝试了 2 种方法来减少运行时间,但没有成功(隐藏测试允许的最大时间限制为 10 秒)-
- 一旦我知道不再有匹配项,就跳出循环
- 创建仅包含与搜索词长度相等的词的子词典
def stringAnagram(dictionary, query):
result = []
for i in range(len(dictionary)):
dictionary[i] = "".join(sorted(dictionary[i]))
dictionary.sort()
dictionary.sort(key=len)
for word in query:
i = 0
sortedWord = "".join(sorted(word))
subDictionary = [entry for entry in dictionary if len(entry) == len(sortedWord)]
for entry in subDictionary:
if sortedWord == entry:
i += 1
result.append(i)
return result
谁能指出瓶颈在哪里?
【问题讨论】:
-
你从来没有明确地说明
stringAnagram应该做什么,一些示例输入和输出会有所帮助。 -
在未来,codereview.stackexchange.com 会更适合这个,因为你的代码已经可以工作了。当然,您需要重新格式化问题以匹配该网站的规则。
-
@CoryKramer 对不起,我忘了补充,我现在添加了解释和示例
-
collections.Counter 是你的朋友。这就是我写stromberg.dnsalias.org/~strombrg/anagrams时使用的@
标签: python optimization anagram