LeetCode in Kotlin

2506. Count Pairs Of Similar Strings

Easy

You are given a 0-indexed string array words.

Two strings are similar if they consist of the same characters.

Return the number of pairs (i, j) such that 0 <= i < j <= word.length - 1 and the two strings words[i] and words[j] are similar.

Example 1:

Input: words = [“aba”,”aabb”,”abcd”,”bac”,”aabc”]

Output: 2

Explanation: There are 2 pairs that satisfy the conditions:

Example 2:

Input: words = [“aabb”,”ab”,”ba”]

Output: 3

Explanation: There are 3 pairs that satisfy the conditions:

Example 3:

Input: words = [“nba”,”cba”,”dba”]

Output: 0

Explanation: Since there does not exist any pair that satisfies the conditions, we return 0.

Constraints:

Solution

class Solution {
    fun similarPairs(words: Array<String>): Int {
        val len = words.size
        if (len == 1) {
            return 0
        }
        val alPh = Array(len) { ByteArray(26) }
        val map: MutableMap<String, Int> = HashMap()
        for (i in 0 until len) {
            val word = words[i]
            for (c in word.toCharArray()) {
                val idx = c.code - 'a'.code
                if (alPh[i][idx].toInt() == 0) {
                    alPh[i][idx]++
                }
            }
            val s = String(alPh[i])
            if (map.containsKey(s)) {
                map[s] = map[s]!! + 1
            } else {
                map[s] = 1
            }
        }
        var pairs = 0
        for ((_, freq) in map) {
            if (freq > 1) {
                pairs += freq * (freq - 1) / 2
            }
        }
        return pairs
    }
}