1public int numSplits(String s) {
2 int n = s.length();
3 int[] leftFreq = new int[26];
4 int[] rightFreq = new int[26];
5
6 // Initialize right frequency table
7 for (char c : s.toCharArray()) {
8 rightFreq[c - 'a']++;
9 }
10
11 int leftUnique = 0;
12 int rightUnique = 0;
13
14 // Count initial unique characters in right part
15 for (int count : rightFreq) {
16 if (count > 0) {
17 rightUnique++;
18 }
19 }
20
21 int goodSplits = 0;
22
23 // Process each split point
24 for (int i = 0; i < n; i++) {
25 char c = s.charAt(i);
26
27 // Move character from right to left
28 if (leftFreq[c - 'a'] == 0) {
29 leftUnique++;
30 }
31 leftFreq[c - 'a']++;
32
33 rightFreq[c - 'a']--;
34 if (rightFreq[c - 'a'] == 0) {
35 rightUnique--;
36 }
37
38 // Check for good split
39 if (leftUnique == rightUnique) {
40 goodSplits++;
41 }
42 }
43 return goodSplits;
44}