亲密字符串:给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果

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"))     
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值