pyhton习题练习

亲密字符串

2020-05-18  本文已影响0人  lvyz0207

亲密字符串

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

猜你喜欢

热点阅读