Python 如何优化我的字谜搜索功能?

Python 如何优化我的字谜搜索功能?,python,optimization,anagram,Python,Optimization,Anagram,我正在处理来自HackerRank的一个问题-我有一个有效的字谜搜索功能,但是,当涉及到大型输入数组/字符串时,它太慢了 dictionary和query输入都是单词列表,函数应在query中查找每个单词的字谜数量,并返回对应于每个单词的字谜计数列表 dictionary = ["abc", "bca"] query = ["abc", "xyz"] # return [2, 0] 我尝试了两种方法来减少运行时间

我正在处理来自HackerRank的一个问题-我有一个有效的字谜搜索功能,但是,当涉及到大型输入数组/字符串时,它太慢了

dictionary
query
输入都是单词列表,函数应在
query
中查找每个单词的字谜数量,并返回对应于每个单词的字谜计数列表

dictionary = ["abc", "bca"]
query = ["abc", "xyz"]

# return [2, 0]
我尝试了两种方法来减少运行时间,但没有成功(对于隐藏测试,允许的最大时间限制是10秒)-

  • 一旦我知道不会再有比赛了,就马上打破循环
  • 创建仅包含与搜索词长度相等的词的子词典

  • 有人能指出瓶颈在哪里吗?

    不是创建特定长度字符串的排列,然后比较是否存在匹配,而是有一个简单的观察,也就是说,如果两个字符串都是字谜,那么两个字符串中的任何字符的数量都是相同的。

    您实际上从未给出过关于
    stringAnagram
    应该做什么的明确问题陈述,一些示例输入和输出会有所帮助。将来,更适合这样做,因为您的代码已经在工作了。当然,您会希望重新设置问题的格式以符合该网站的规则。@CoryKramer抱歉,我忘了添加它,我添加了一个解释和一个示例nowcollections。Counter是您的朋友。这就是我写这篇文章时使用的方法,它只会返回字典中有字谜的单词列表——是否可以为字典中的每个单词添加多少字谜的计数?
    def stringAnagram(dictionary, query):
        sorted_dictionary = {''.join(sorted(word)) for word in words}
        result = [word for word in query if ''.join(sorted(word)) in sorted_dictionary]
        return result
    
    def stringAnagram(dictionary, query):
        sorted_dictionary = {''.join(sorted(word)) for word in words}
        result = [word for word in query if ''.join(sorted(word)) in sorted_dictionary]
        return result