859. Buddy Strings
Easy
Given two strings s and goal, return true if you can swap two letters in
s so the result is equal to goal, otherwise, return false.
Swapping letters is defined as taking two indices i and j (0-indexed) such
that i != j and swapping the characters at s[i] and s[j].
For example, swapping at indices 0 and 2 in "abcd" results in "cbad".
Solution
class Solution:
def buddyStrings(self, s: str, goal: str) -> bool:
if len(s) != len(goal):
return False
if s == goal:
# need to find a duplicate character to swap
seen = set()
for a in s:
if a in seen:
return True
seen.add(a)
return False
pairs = []
for a, b in zip(s, goal):
if a != b:
pairs.append((a, b))
if len(pairs) != 2:
return False
if pairs[0] == pairs[1][::-1]:
return True
return False