array and hashmap December 2, 2022

Determine if two strings are close

Time O(n) Space O(n) Open original problem

We will check if the two strings are equal. If they are not equal, then we will return false. If they are equal, then we will check if the frequency of each character in the two strings are equal. If they are not equal, then we will return false. If they are equal, then we will check if the frequency of each character in the two strings are equal. If they are not equal, then we will return false. If they are equal, then we will return true.

class Solution:
    def closeStrings(self, word1: str, word2: str) -> bool:
        c1 = collections.Counter(word1)
        c2 = collections.Counter(word2)

        count1 = sorted(c1.values())
        count2 = sorted(c2.values())

        set1 = set(word1)
        set2 = set(word2)

        if count1 == count2 and set1 == set2:
            return True

        return False

Time complexity: O(n)
Space complexity: O(n)

We can achieve it with a single line of code:

class Solution:
    def closeStrings(self, word1: str, word2: str) -> bool:
        c1 = collections.Counter(word1)
        c2 = collections.Counter(word2)
        return sorted(c1.values()) == sorted(c2.values()) and sorted(c1.keys()) == sorted(c2.keys())