## 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:trueExplanation:For example, swap the first character with the last character of s2 to make "bank".

**Example 2:**

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

**Example 3:**

Input:s1 = "kelb", s2 = "kelb"Output:trueExplanation: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).