我正在努力学习Python。考虑一下C:
中这个简单的anagram检查器bool are_anagrams(const char* str1, const char* str2)
{
int str1_count[NUM_CHARS] = {0};
int str2_count[NUM_CHARS] = {0};
for(int i = 0; i < strlen(str1); i++)
{
str1_count[str1[i] - 'a']++;
}
for(int i = 0; i < strlen(str2); i++)
{
str2_count[str2[i] - 'a']++;
}
for(int i = 0; i < NUM_CHARS; i++)
{
if(str1_count[i] != str2_count[i])
{ return false; }
}
return true;
}
具体来说,如何在Python中完成行str1_count[str2[i] - 'a']++
?
答案 0 :(得分:5)
具体来说,如何在Python中完成行
str1_count[str2[i] - 'a']++
?
不是。 Python有dict
来处理这样的事情。
str1_count = {}
...
str1_count[char2] += 1
虽然collections.defaultdict
通常用于处理新密钥的情况。
str1_count = collections.defaultdict(int)
答案 1 :(得分:3)
在Python中考虑这个简单的anagram检查器
from collections import Counter
def are_anagrams(str1, str2):
return Counter(str1) == Counter(str2)
你如何将其转换为C? (这与您的C版使用相同的算法)
要回答您的问题,您必须使用ord()
str1_count[ord(str2[i]) - ord('a')]
看起来像一个错误,但str1 / str2命名为
答案 2 :(得分:3)
甚至更好,
def are_anagrams(s1, s2):
return sorted(s1)==sorted(s2)
编辑以响应@gnibbler:
这是一个快速的运行时间比较,其中x轴给出字符串长度;蓝色是你的功能,绿色是我的。两者看起来都很线性。