AlgoMaster Logo

Number of Good Ways to Split a String

s=aacaba
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}
0 / 46
String:aacaba