859. 亲密字符串
给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true ;否则返回 false 。
示例 1:
输入: A = "ab", B = "ba"
输出: true
示例 2:
输入: A = "ab", B = "ab"
输出: false
示例 3:
输入: A = "aa", B = "aa"
输出: true
示例 4:
输入: A = "aaaaaaabc", B = "aaaaaaacb"
输出: true
示例 5:
输入: A = "", B = "aa"
输出: false
提示:
0 <= A.length <= 20000
0 <= B.length <= 20000
A 和 B 仅由小写字母构成。
思路
对比两个字符串,如果长度不一样了,直接返回False;之后扫描两个字符串,用t1,t2分别记录第一个和第二个不相同的字符,同时用cnt记录不同的字符个数,如果cnt不等于2或0直接返回False;扫描完成后,麻烦一点的是cnt等于0的时候,因为有可能是A=”aa”,B=”aa”这样交换是符合的,如果A=”ab”,B=”ab”是不符合的,可以看到若要cnt等于0时符合需要A,B里同时存在两个相同的字符,所以先建立一个set集合,然后统计是否存在这样的字符即可。
class Solution:
def buddyStrings(self, A, B):
"""
:type A: str
:type B: str
:rtype: bool
"""
la = len(A)
lb = len(B)
if la != lb:
return False
t1 = ""
t2 = ""
cnt = 0
for i in range(la):
if A[i] != B[i]:
cnt += 1
if t1 == "":
t1 = i
elif t2 == "":
t2 = i
if cnt == 0:
Map = set(A)
for item in Map:
if A.count(item) >= 2:
return True
return False
if cnt != 2:
return False
if A[t1] == B[t2] and A[t2] == B[t1]:
return True
else:
return False