思路:
1、若A和B都为空,返回False;
2、若两串长度不同,返回False;
3、若A和B相等, 只要有重复元素,返回True;
4、若两串长度相同但不相等,统计不同字符的个数num,并记录其位置,若num>2,返回False;
5、将A中不同的两个字符交换位置,与B相等,返回True。
1 class Solution(object): 2 def buddyStrings(self, A, B): 3 """ 4 :type A: str 5 :type B: str 6 :rtype: bool 7 """ 8 # A和B都为空,返回False 9 if A == B == "": 10 return False 11 # 两串长度不同,返回False; 12 if len(A) != len(B): 13 return False 14 # 若字符串相等, 只要有重复元素,返回True 15 if A == B: 16 for i, ch in enumerate(A): 17 if A.count(ch) != 1: 18 return True 19 else: 20 return False 21 num = 0 22 dif = [0] * len(A) 23 for i, ch in enumerate(A): 24 if ch != B[i]: 25 dif[num] = i 26 num += 1 27 # 有两个以上的不同字符,不满足 28 if num > 2: 29 return False 30 else: 31 lista = list(A) 32 lista[dif[0]], lista[dif[1]] = lista[dif[1]], lista[dif[0]] 33 A = "".join(lista) 34 if A == B: 35 return True 36 else: 37 return False 38 39 if __name__ == '__main__': 40 solution = Solution() 41 print(solution.buddyStrings("abcd", "abcd"))