859:亲密字符串
题目:
给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true ;否则返回 false 。
示例 1:
输入: A = "ab", B = "ba"
输出: true
解释: 你可以交换 A[0] = 'a' 和 A[1] = 'b' 生成 "ba",此时 A 和 B 相等。
示例 2:
输入: A = "ab", B = "ab"
输出: false
解释: 你只能交换 A[0] = 'a' 和 A[1] = 'b' 生成 "ba",此时 A 和 B 不相等。
分析:
1. 首先A和B长度不相等时,返回False;
2. A==B,且其中有重复字符,可以保证交换之后相等;
3. A[i]==B[j],A[j]==B[i]
代码如下:
def buddyStrings(A, B):
#如果A,B长度不等,返回False
if len(A)!=len(B):return False
#如果长度小于2,返回False
if len(A)<2:return False
#A==B
if A==B:
repeat = []
for i in A:
if i not in repeat:repeat.append(i)
else:
#i在rpeat中已经添加过
return True
#一开始缩进没有设置好。一定要注意,一步一步debug
return False
#另外的情况,A!=B。长度相等,需要有两个不相等的字符
count =0 #统计A和B不一样的个数
differA = [] #不一样的字符添加到其中
differB = []
for i in range(len(A)):
if A[i]!=B[i]:
differA.append(A[i])
differB.append(B[i])
count += 1
if count != 2:return False
if differA[0] == differB[1] and differA[1] == differB[0]:
return True
return False
if __name__=="__main__":
print(buddyStrings("aab","aba"))