LeetCode_859_python_亲密字符串

题目要求

给定两个由小写字母构成的字符串 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 = "abab", B = "abab"
输出: true

示例5

输入: A = "aaaaaaabc", B = "aaaaaaacb"
输出: true

示例6

输入: A = "", B = "aa"
输出: false

题目分析

题目要求只能交换A、B字符串中的两个字母,相等的话为True,不等的话为False;

  • 从示例2、3、4(A=B)中:当A、B相等时,有时为True,有时为False,可以看出为True的示例中有相同的字母,因此存在相同字母时,两者交换其实还是一样的;字母都不相同的话,无法交换即False
  • 字符串A、B长度不一致时,直接False
  • 当长度一致,A、B不一样时,遍历所有字母,当不一样时,将下标赋值给新的list中,新的list的长度下面分类讨论
    *长度 = 2,说明有两个位置的元素不一样:若相互之间不同位置的元素一致则为True,否则为False
    *长度 !=2,说明存在两个以上的元素不一致
    下面将按照上述分析用Python写出详细代码:

代码

class Solution(object):
    def buddyStrings(self,A,B):
        a = []               # 存放不一致元素的下标
        if A == B:           # AB相等时,'aa''aa'True,'ab''ab'False
            if len(A) == len(set(A)):    # 字符串中没有相同元素时,如'ab''ab',则为False
                return False
            else:                        # 否则如:'aa''aa'"abab""abab",为True
                return True
        if len(A) != len(B):        # 长度不一样时,直接False
            return False
        for i in range(len(A)):     # 当长度一致,字符串不相等时,如"ab""ba",遍历所有元素
            if A[i] != B[i]:       
                a.append(i)         # 将不一致的元素下标放入a中
        if len(a) != 2:             # a的长度不等于2时,说明有超过两个元素不一样,False
            return False   
        if A[a[0]] == B[a[1]] and A[a[1]] == B[a[0]]:     # a的长度为2时,相互之间不同位置的元素一致时,True
            return True
        else:                       # 不一致时,False
            return False

本人小白一个,大神有更高效的算法,望留言!!!
持续更新中。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值