Number of Atoms LeetCode solution in JavaScript

1
var countOfAtoms = function (formula) {
2
function getElementCount(flatFormula) {
3
const reElementCount = /([A-Z][a-z]*)(\d*)/g;
4
let matches = flatFormula.matchAll(reElementCount);
5

6
let output = new Map();
7

8
for (let [match, element, count] of matches) {
9
count = count === "" ? 1 : +count;
10

11
if (output.has(element)) {
12
output.set(element, output.get(element) + count);
13
} else {
14
output.set(element, count);
15
}
16
}
17

18
return output;
19
}
20

21
function flattenElementCount(elCountMap) {
22
let arr = [...elCountMap.entries()].sort();
23

24
return arr.reduce((str, item) => {
25
let num = item[1] === 1 ? "" : item[1];
26
return str + item[0] + num;
27
}, "");
28
}
29

30
function unnest(fullMatch, innerFormula, multiplier) {
31
let elementCount = getElementCount(innerFormula);
32
multiplier = multiplier === "" ? 1 : +multiplier;
33

34
for (let [element, count] of elementCount) {
35
elementCount.set(element, elementCount.get(element) * multiplier);
36
}
37

38
return flattenElementCount(elementCount);
39
}
40

41
function flattenFormula(formula) {
42
const reNested = /\((\w+)\)(\d*)/g;
43

44
while (reNested.test(formula)) {
45
formula = formula.replaceAll(reNested, unnest);
46
}
47

48
return formula;
49
}
50

51
let flatFormula = flattenFormula(formula);
52

53
return flattenElementCount(getElementCount(flatFormula));
54
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0