# LeetCode 1790. Check if One String Swap Can Make Strings Equal

## Description

https://leetcode.com/problems/check-if-one-string-swap-can-make-strings-equal/

You are given two strings `s1` and `s2` of equal length. A string swap is an operation where you choose two indices in a string (not necessarily different) and swap the characters at these indices.

Return `true` if it is possible to make both strings equal by performing at most one string swap on exactly one of the strings. Otherwise, return `false`.

Example 1:

```Input: s1 = "bank", s2 = "kanb"
Output: true
Explanation: For example, swap the first character with the last character of s2 to make "bank".
```

Example 2:

```Input: s1 = "attack", s2 = "defend"
Output: false
Explanation: It is impossible to make them equal with one string swap.
```

Example 3:

```Input: s1 = "kelb", s2 = "kelb"
Output: true
Explanation: The two strings are already equal, so no string swap operation is required.
```

Example 4:

```Input: s1 = "abcd", s2 = "dcba"
Output: false
```

Constraints:

• `1 <= s1.length, s2.length <= 100`
• `s1.length == s2.length`
• `s1` and `s2` consist of only lowercase English letters.

## Explanation

Check if letter occurrences are matched and if mismatch counts are no more than 2.

## Python Solution

``````class Solution:
def areAlmostEqual(self, s1: str, s2: str) -> bool:
count_s1 = {}

for c in s1:
count_s1[c] = count_s1.get(c, 0) + 1

count_s2 = {}
for c in s2:
count_s2[c] = count_s2.get(c, 0) + 1

for key, value in count_s1.items():
if key not in count_s2 or value != count_s2[key]:
return False

count_mismatch = 0

for c1, c2 in zip(s1, s2):
if c1 != c2:
count_mismatch += 1

if count_mismatch > 2:
return False

return True

``````
• Time Complexity: O(N).
• Space Complexity: O(N).