2024-09-30 16:30:08 发布
网友
正如您从标题中看到的,我应该实现一个递归函数,检查两个单词是否是anagram。我用“正常”的方式做了,但我不知道如何递归地做。这是我的密码。请告诉我:
def are_anagram1(s1, s2): return [False, True][sum([ord(x) for x in s1]) == sum([ord(x) for x in s2])]
正如我在标题中所说,我正在使用python
如果你排序然后比较数组,你的算法会快得多。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中该元素的出现次数。相当于:
collections.Counter
如果你排序然后比较数组,你的算法会快得多。Python的sort在O(nlogn)时间内运行,但是要计算所有可能的置换并将它们与在O(n)中运行的字符串进行比较时间。在
例如,如果n是64,O(n logn)将是常数*384次迭代。O(n!)将是常数*1.3*10^89次迭代。正如您可能看到的,384次迭代比1.3*10^89次迭代快得多。在
只是想用一个更好的解决方案,递归。Python中这类问题的规范解决方案是使用^{}
一个
^{pr2}$collections.Counter
对象接受iterable中的每个元素,将它们全部分配给散列映射(dict-like对象)中的键,并将值设置为iterable中该元素的出现次数。相当于:相关问题 更多 >
编程相关推荐