class Solution:
def buddyStrings(self, s: str, goal: str) -> bool:
m, n = len(s), len(goal)
# 长度不同直接返回
if m != n:
return False
cntS, cntG = [0]*26, [0]*26 #表示字母a-z的词频
diff = 0 # 不同的位数
# 统计词频
for a,b in zip(s, goal):
cntS[ord(a) - ord('a')] += 1
cntG[ord(b) - ord('a')] += 1
if a != b:
diff += 1
for i in range(26):
if cntS[i] != cntG[i]: #某个字母词频不同直接返回
return False
# 此时长度和词频都一样
if diff == 0: # 特殊情况,看有无频率>=2的字符
for i in range(26):
if cntS[i] >= 2:
return True
return False
# 只有不同位数为2才符合,其余都不符
if diff == 2:
return True
return False