Skip to content

Commit 509eb96

Browse files
authored
Create Solution.java
1 parent 9a3b8a7 commit 509eb96

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
class Solution {
2+
public String countOfAtoms(String formula) {
3+
Map<String, Integer> map = new HashMap<>();
4+
int[] stack = new int[1000];
5+
int top = 0, multiplier = 1, freq = 0;
6+
char[] c = formula.toCharArray();
7+
for (int i = c.length - 1; i >= 0; i--) {
8+
if (c[i] >= 'a' && c[i] <= 'z') {
9+
int end = i--;
10+
while (i >= 0 && c[i] >= 'a' && c[i] <= 'z') i--;
11+
String key = new String(c, i, end - i + 1);
12+
map.put(key, map.getOrDefault(key, 0) + Math.max(freq, 1) * multiplier);
13+
freq = 0;
14+
} else if (c[i] >= 'A' && c[i] <= 'Z') {
15+
String key = new String(c, i, 1);
16+
map.put(key, map.getOrDefault(key, 0) + Math.max(freq, 1) * multiplier);
17+
freq = 0;
18+
} else if (c[i] >= '0' && c[i] <= '9') {
19+
freq = c[i] - '0';
20+
int p = 10;
21+
while (i - 1 >= 0 && c[i - 1] >= '0' && c[i - 1] <= '9') {
22+
freq += p * (c[--i] - '0');
23+
p *= 10;
24+
}
25+
} else if (c[i] == ')') {
26+
stack[top++] = multiplier;
27+
multiplier *= Math.max(freq, 1);
28+
freq = 0;
29+
} else {
30+
multiplier = stack[--top];
31+
}
32+
}
33+
List<String> keys = new ArrayList<>(map.keySet());
34+
Collections.sort(keys);
35+
StringBuilder sb = new StringBuilder();
36+
for (String key : keys) {
37+
sb.append(key);
38+
int f = map.get(key);
39+
if (f > 1) sb.append(f);
40+
}
41+
return sb.toString();
42+
}
43+
}

0 commit comments

Comments
 (0)