LeetCode in Kotlin

3838. Weighted Word Mapping

Easy

You are given an array of strings words, where each string represents a word containing lowercase English letters.

You are also given an integer array weights of length 26, where weights[i] represents the weight of the ith lowercase English letter.

The weight of a word is defined as the sum of the weights of its characters.

For each word, take its weight modulo 26 and map the result to a lowercase English letter using reverse alphabetical order (0 -> 'z', 1 -> 'y', ..., 25 -> 'a').

Return a string formed by concatenating the mapped characters for all words in order.

Example 1:

Input: words = [“abcd”,”def”,”xyz”], weights = [5,3,12,14,1,2,3,2,10,6,6,9,7,8,7,10,8,9,6,9,9,8,3,7,7,2]

Output: “rij”

Explanation:

Thus, the string formed by concatenating the mapped characters is "rij".

Example 2:

Input: words = [“a”,”b”,”c”], weights = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]

Output: “yyy”

Explanation:

Each word has weight 1. The result modulo 26 is 1 % 26 = 1, which maps to 'y'.

Thus, the string formed by concatenating the mapped characters is "yyy".

Example 3:

Input: words = [“abcd”], weights = [7,5,3,4,3,5,4,9,4,2,2,7,10,2,5,10,6,1,2,2,4,1,3,4,4,5]

Output: “g”

Explanation:

The weight of "abcd" is 7 + 5 + 3 + 4 = 19. The result modulo 26 is 19 % 26 = 19, which maps to 'g'.

Thus, the string formed by concatenating the mapped characters is "g".

Constraints:

Solution

class Solution {
    fun mapWordWeights(words: Array<String>, weights: IntArray): String {
        val ans = StringBuilder()
        for (s in words) {
            var cnt = 0
            for (i in 0..<s.length) {
                cnt += weights[s[i].code - 'a'.code]
            }
            ans.append(('a'.code + (25 - (cnt % 26))).toChar())
        }
        return ans.toString()
    }
}