题目
难度:★★☆☆☆
类型:字符串
给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回
true ;否则返回 false 。
提示
0 <= A.length <= 20000
0 <= B.length <= 20000
A 和 B 仅由小写字母构成。
示例
示例 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
解答
这里参考一个评论中的解法:
class Solution(object):
def buddyStrings(self, A, B):
# 长度不同直接false
if len(A) != len(B): return False
# 由于必须交换一次,在相同的情况下,交换相同的字符
if A == B and len(set(A)) < len(A): return True
# 使用 zip 进行匹配对比,挑出不同的字符对
dif = [(a, b) for a, b in zip(A, B) if a != b]
# 对数只能为2,并且对称,如 (a,b)与(b,a)
return len(dif) == 2 and dif[0] == dif[1][::-1]
如有疑问或建议,欢迎评论区留言~