# Time:  O(n)
# Space: O(1)

# Given two strings A and B of lowercase letters,
# return true if and only if we can swap two letters in A
# so that the result equals B.
#
# Example 1:
#
# Input: A = "ab", B = "ba"
# Output: true
# Example 2:
#
# Input: A = "ab", B = "ab"
# Output: false
# Example 3:
#
# Input: A = "aa", B = "aa"
# Output: true
# Example 4:
#
# Input: A = "aaaaaaabc", B = "aaaaaaacb"
# Output: true
# Example 5:
#
# Input: A = "", B = "aa"
# Output: false
#
# Note:
# - 0 <= A.length <= 20000
# - 0 <= B.length <= 20000
# - A and B consist only of lowercase letters.

import itertools


class Solution(object):
    def buddyStrings(self, A, B):
        """
        :type A: str
        :type B: str
        :rtype: bool
        """
        if len(A) != len(B):
            return False
        diff = [(a, b) for a, b in itertools.izip(A, B) if a != b]
        return (not diff and len(set(A)) < len(A)) or \
               (len(diff) == 2 and diff[0] == diff[1][::-1])

Create buddy-strings.py