Check if One String Swap Can Make Strings Equal

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution:
    def areAlmostEqual(self, s1: str, s2: str) -> bool:
        n = len(s1)
        mismatch = 0
        flag = 1
        arr = [0] * 26

        for i in range(n):
            arr[ord(s1[i]) - ord('a')] += 1
            arr[ord(s2[i]) - ord('a')] -= 1

        for freqDiff in arr:
            if freqDiff:     # if frequency difference of characters in both strings is different
                flag = 0
                break

        if not flag: 
            return False

        for i in range(n):
            if s1[i] != s2[i]:
                mismatch += 1

        return mismatch <= 2