Number of Atoms LeetCode solution in Java

1
class Solution {
2
public String countOfAtoms(String formula) {
3
Deque<Integer> multiplier = new ArrayDeque<>();
4
Map<String, Integer> map = new HashMap<>();
5
int lastValue = 1;
6

7
multiplier.push(1);
8

9
// Iterate from right to left
10
for (int i = formula.length() - 1; i >= 0; i--) {
11
if (Character.isDigit(formula.charAt(i))) { // Case of a digit - Get full number and save
12
StringBuilder sb = new StringBuilder();
13

14
while (Character.isDigit(formula.charAt(i - 1))) {
15
sb.append(formula.charAt(i));
16
i--;
17
}
18
sb.append(formula.charAt(i));
19
lastValue = Integer.parseInt(sb.reverse().toString());
20
} else if (formula.charAt(i) == ')') { // Start parenthesis - push next multiplier to stack
21
multiplier.push(lastValue * multiplier.peek());
22
lastValue = 1;
23
} else if (formula.charAt(i) == '(') { // End parenthesis - pop last multiplier
24
multiplier.pop();
25
} else { // Case of an element name - construct name, update count based on multiplier
26
StringBuilder sb = new StringBuilder();
27

28
while (Character.isLowerCase(formula.charAt(i))) {
29
sb.append(formula.charAt(i));
30
i--;
31
}
32
sb.append(formula.charAt(i));
33

34
String element = sb.reverse().toString();
35
map.put(element, map.getOrDefault(element, 0) + lastValue * multiplier.peek());
36
lastValue = 1;
37
}
38
}
39

40
// Sort map keys
41
List<String> elements = new ArrayList<>(map.keySet());
42
StringBuilder sb = new StringBuilder();
43
Collections.sort(elements);
44

45
// Construct output
46
for (String element : elements) {
47
sb.append(element);
48
if (map.get(element) > 1) {
49
sb.append(map.get(element));
50
}
51
}
52
return sb.toString();
53
}
54
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0