Number of Substrings Containing All Three Characters

Count substrings containing at least one of each: "a", "b", "c".

Example 1
Input: s="abcabc" → Output: 10
Example 2
Input: s="aaacb" → Output: 3

Solution Approach

For each right, track last seen position of a,b,c. Valid substrings end at right, start at 0..min(last[a],last[b],last[c]).

  • Track last seen index of a, b, c (init -1)
  • For each position: update last seen for current char
  • Count = min(last[a], last[b], last[c]) + 1 (all starting points that form valid window)
  • Add to total
Java
public int numberOfSubstrings(String s) {
    int[] last = {-1, -1, -1};
    int count = 0;
    for (int i = 0; i < s.length(); i++) {
        last[s.charAt(i) - 'a'] = i;
        count += 1 + Math.min(last[0], Math.min(last[1], last[2]));
    }
    return count;
}
  • Time Complexity: O(n)
  • Space Complexity: O(1)