LeetCode:859. Buddy Strings - 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 = "aaaaaaabc", B = "aaaaaaacb"
输出: true

示例 5:

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

提示:

  1. 0 <= A.length <= 20000
  2. 0 <= B.length <= 20000
  3. A 和 B 仅由小写字母构成。

问题分析:

这个题目不难,但要理解透,就是字符串A中的两个字符必须进行一次交换之后和字符串B相同。所以可以分情况讨论。
(1)两个字符串长度不同,直接返回false,len(A)==len(B)是亲密字符串的前提条件
(2)当 A==B,字符串A中必须存在重复字符,否则无法完成一次交换,也就成不了亲密字符串。
(3)当 A != B,  此时要想成立,字符串A、B对应位置有两位不一样,且,交换之后一样

Python3实现:

class Solution:
    def buddyStrings(self, A, B):
        if len(A) != len(B): return False  # 长度不相等的情况
        if A == B:  # 两个字符串相等的情况,A必须存在重复字符
            seen = set()
            for a in A:
                if a in seen: return True
                seen.add(a)
            return False
        else:
            pairs = []
            for a, b in zip(A, B):  # A、B不相等的情况
                if a != b:
                    pairs.append([a, b])
                if len(pairs) > 2: return False
            return len(pairs) == 2 and pairs[0] == pairs[1][::-1]


if __name__ == '__main__':
    solu = Solution()
    print(solu.buddyStrings(A='ab', B='ba'))
欢迎指正哦

猜你喜欢

转载自blog.csdn.net/xx_123_1_rj/article/details/80984277