这个函数的输入是两个字符串,目的是判断这两个字符串是否是字谜.例如,"qwerty"和"qetyrw"是anagram,这意味着重新排列第一个字符串中的字符可以得到第二个字符串.并且不要求区分大小写."qwerty"和"QWerTY"也是字谜.我只是混淆了我的功能,什么也没有返回.我的功能如下:
def is_anagram(string_a,string_b):
"""returns True if the strings are anagrams of each other
str, list -> boolean"""
new_a=string_a.lower()
new_b=string_b.lower()
i=0
if len(string_a)!=len(string_b):
return False
else:
while i<=len(new_a)-1:
if new_a[i] in new_b:
list(new_b).remove(new_a[i])
i=i+1
break
if len(list(new_b))==0:
return True
else:
return False
Run Code Online (Sandbox Code Playgroud)
排序以识别字符串是否是另一个字符串,需要O(n logn)时间.相反,我们可以使用计数器对象来计算每个字母的出现次数:
from collections import Counter
def is_anagram(string_a, string_b):
return Counter(string_a.lower()) == Counter(string_b.lower())
Run Code Online (Sandbox Code Playgroud)
这将取平均线性时间.基本观察是两个字谜字符串具有完全相同的字母频率.
例子:
>>> is_anagram("abc", "aaa")
False
>>> is_anagram("abc", "aac")
False
>>> is_anagram("abc", "acb")
True
Run Code Online (Sandbox Code Playgroud)