commit fe4449f6bf1eb1a7e5e668705a033fb0743c4eee
parent d259ffeae14d4188ca694380359526a86db802e2
Author: Jack Sangdahl <jack@pngu.org>
Date: Sat, 13 Jun 2026 19:44:40 -0600
3838. weighted word mapping
Diffstat:
2 files changed, 176 insertions(+), 0 deletions(-)
diff --git a/weighted_word_mapping.c b/weighted_word_mapping.c
@@ -0,0 +1,50 @@
+// 3838. Weighted Word Mapping
+#include "leetcode.h"
+
+/*
+ * 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
+ * i'th 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. return a string formed by concatenating the mapped characters for all
+ * words in order.
+ */
+
+char *mapWordWeights(char **words, int wordsSize, int *weights,
+ int weightsSize) {
+ char *ans = (char *)malloc((wordsSize + 1) * sizeof(char));
+ for (int i = 0; i < wordsSize; i++) {
+ int sum = 0;
+ for (char *j = words[i]; *j; j++)
+ sum += weights[*j - 'a'];
+ ans[i] = 'z' - sum % 26;
+ }
+ ans[wordsSize] = '\0';
+ return ans;
+}
+
+int main() {
+ char *wo1[] = {"abcd", "def", "xyz"}, *r1 = "rij";
+ char *wo2[] = {"a", "b", "c"}, *r2 = "yyy";
+ char *wo3[] = {"abcd"}, *r3 = "g";
+ int we1[] = {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};
+ int we2[] = {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};
+ int we3[] = {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};
+ char *mww1 = mapWordWeights(wo1, ARRAY_SIZE(wo1), we1, ARRAY_SIZE(we1));
+ char *mww2 = mapWordWeights(wo2, ARRAY_SIZE(wo2), we2, ARRAY_SIZE(we2));
+ char *mww3 = mapWordWeights(wo3, ARRAY_SIZE(wo3), we3, ARRAY_SIZE(we3));
+ printf("%s\n", mww1);
+ assert(!strcmp(mww1, r1));
+ printf("%s\n", mww2);
+ assert(!strcmp(mww2, r2));
+ printf("%s\n", mww3);
+ assert(!strcmp(mww3, r3));
+ free(mww1);
+ free(mww2);
+ free(mww3);
+}
diff --git a/weighted_word_mapping.py b/weighted_word_mapping.py
@@ -0,0 +1,126 @@
+# 3838. Weighted Word Mapping
+
+"""
+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
+i'th 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. return a string formed by concatenating the mapped characters for all
+words in order.
+"""
+
+
+class Solution:
+ def mapWordWeights(self, words: List[str], weights: List[int]) -> str:
+ ans = []
+ for i in words:
+ total = 0
+ for j in i:
+ total += weights[ord(j) - ord("a")]
+ ans.append(chr(ord("z") - total % 26))
+ return "".join(ans)
+
+
+if __name__ == "__main__":
+ obj = Solution()
+ print(
+ obj.mapWordWeights(
+ 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,
+ ],
+ )
+ )
+ print(
+ obj.mapWordWeights(
+ 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,
+ ],
+ )
+ )
+ print(
+ obj.mapWordWeights(
+ 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,
+ ],
+ )
+ )