859. 亲密字符串

 

思路:
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"))
 
原文地址:https://www.cnblogs.com/panweiwei/p/12697898.html