在python中递归检查一个单词是否是另一个单词的anagram

2024-09-30 16:30:08 发布

您现在位置:Python中文网/ 问答频道 /正文

正如您从标题中看到的,我应该实现一个递归函数,检查两个单词是否是anagram。我用“正常”的方式做了,但我不知道如何递归地做。这是我的密码。请告诉我:

def are_anagram1(s1, s2):
   return [False, True][sum([ord(x) for x in s1]) == sum([ord(x) for x in s2])]

正如我在标题中所说,我正在使用python


Tags: in密码标题forreturndef方式单词
2条回答

如果你排序然后比较数组,你的算法会快得多。Python的sort在O(nlogn)时间内运行,但是要计算所有可能的置换并将它们与在O(n)中运行的字符串进行比较时间。在

例如,如果n是64,O(n logn)将是常数*384次迭代。O(n!)将是常数*1.3*10^89次迭代。正如您可能看到的,384次迭代比1.3*10^89次迭代快得多。在

只是想用一个更好的解决方案,递归。Python中这类问题的规范解决方案是使用^{}

from collections import Counter

words = ['dogs','gods']

def is_anagram(word1, word2):
    return Counter(word1) == Counter(word2)

assert is_anagram(*words)

一个collections.Counter对象接受iterable中的每个元素,将它们全部分配给散列映射(dict-like对象)中的键,并将值设置为iterable中该元素的出现次数。相当于:

^{pr2}$

相关问题 更多 >