亲密字符串

作者: lvyz0207 | 来源:发表于2020-05-18 21:09 被阅读0次

    亲密字符串

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

    相关文章

      网友评论

        本文标题:亲密字符串

        本文链接:https://www.haomeiwen.com/subject/cyopohtx.html