親密字符串
給定兩個由小寫字母構成的字符串 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 僅由小寫字母構成。
class Solution(object):
def buddyStrings(self, A, B):
if (not A and not B) or len(A) != len(B):
return False
if A == B:
s = set()
for i in A:
if i in s:
return True
s.add(i)
return False
else:
res = []
for a,b in zip(A, B):
print(a,b)
if a != b:
res.append([a,b])
if len(res) > 2:
return False
print(res)
return len(res) == 2 and res[0] == res[1][::-1]
s = Solution()
bs = s.buddyStrings("cdab","cdba")
print(bs)
想法盲點: A = "aba" B = "aba"
解題思路:
A和B均為空,返回False
len(A) != len(B),返回False
len(A) = len(B)且A=B,只要A中任意一個字符出現出現兩次,那么就可以通過交換
這兩個相同的字符得到B,所以返回True。否則,返回False
len(A) = len(B) 且 A != B,縱向對比A和B每個位置上的字符,記錄不相同的字符對,
如果字符對數量大于2,返回False;如果字符串對數量為2,且第一對的逆序就
是第二對,那么通過交換這兩個字符就可以從A得到B,所以返回True。

自然而然