# 原文出处:https://www.cnblogs.com/lianghui-lianghui/articles/10233736.html
# 定义字符串A和B为相似,当且仅当A和B中所有字符出现的次数均相等时,说明字符串A和字符串B相似
# 请实现一个函数判断为A和B是否相似,例如 : "aac"和"caa"相似,但"aac"和"caab"不相似
# 方法一
def same(s1, s2):
d1 = {}
d2 = {}
# 以字典key-value的形式统计字符串中每个字符出现的次数
for i in s1:
# setdefault()方法,接收两个参数,一个是key,一个是默认值
res1 = d1.setdefault(i, 0) # 如果key i在字典d1中不存在,那么返回默认值0;如果存在,则返回key i在字典d1中的值
res1 += 1 # 递增key i出现的次数
d1[i] = res1 # 将key i 和 value res 添加到字典di中
for j in s2:
res2 = d2.setdefault(j, 0)
res2 += 1
d2[j] = res2
return d1 == d2
s1 = "abc"
s2 = "cba"
print(same(s1, s2))
# 优化方法一
def str2dict(s):
d = {}
for i in s:
res = d.setdefault(i, 0)
res += 1
d[i] = res
return d
def same(s1, s2):
return str2dict(s1) == str2dict(s2)
s1 = "anagram"
s2 = "nagaram"
print(same(s1, s2))
# 方法二
# 使用Counter类,Counter类可以统计字符串中每个字符出现的次数
from collections import Counter
s1 = "aac"
s2 = "caa"
print(Counter(s1)) # 输出:Counter({'a': 2, 'c': 1})
print(Counter(s2)) # 输出:Counter({'a': 2, 'c': 1})
print(Counter(s1) == Counter(s2)) # 输出:True