亲密字符串
给定两个由小写字母构成的字符串 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。
自然而然
网友评论