Maximum Score Words Formed by Letters LeetCode solution in JavaScript

1
var maxScoreWords = function (words, letters, score) {
2
// unique chars
3
let set = new Set();
4
for (let w of words) for (let c of w) set.add(c);
5

6
// score of unique chars
7
let map = new Map();
8
for (let c of set) map.set(c, score[c.charCodeAt() - "a".charCodeAt()]);
9

10
// letter count
11
let map_letters = new Map();
12
for (let c of letters)
13
map_letters.set(c, map_letters.has(c) ? map_letters.get(c) + 1 : 1);
14

15
// score of words
16
let SW = [];
17
for (let w of words) {
18
let s = 0;
19
for (let c of w) s += map.get(c);
20
SW.push(s);
21
}
22

23
const sortStr = (s) => s.split("").sort().join("");
24
const combineStrings_fromArrayAndIndexes = (A, I) =>
25
I.reduce((s, i) => s + A[i], "");
26
const getFreqMapFromStr = (s) =>
27
s
28
.split("")
29
.reduce((m, c) => (m.set(c, m.has(c) ? m.get(c) + 1 : 1), m), new Map());
30
const isMapSubOfAnotherMap = (m1, m2) => {
31
for (let [c, count] of m1)
32
if (!m2.has(c) || count > m2.get(c)) return false;
33
return true;
34
};
35

36
let max1 = -Infinity;
37
const takeOrNot = (i, take, indexes, A, n) => {
38
if (i === n) {
39
if (
40
isMapSubOfAnotherMap(
41
getFreqMapFromStr(combineStrings_fromArrayAndIndexes(words, indexes)),
42
map_letters
43
)
44
) {
45
let mm = indexes.reduce((sum, i) => sum + SW[i], 0);
46
max1 = Math.max(max1, mm);
47
}
48
return;
49
}
50
takeOrNot(i + 1, take, indexes, A, n);
51
takeOrNot(i + 1, take, [...indexes, i], A, n);
52
};
53
takeOrNot(0, true, [], SW, SW.length);
54
return max1;
55
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0