1358. Number of Substrings Containing All Three Characters

Medium
Given a string s consisting only of characters a, b and c.
Return the number of substrings containing at least one occurrence of all these characters a, b and c.
Example 1:
Input: s = "abcabc"
Output:
10
Explanation:
The substrings containing at least one occurrence of the characters a, b and c are "abc", "abca", "abcab", "abcabc", "bca", "bcab", "bcabc", "cab", "cabc" and "abc" (again).
Example 2:
Input: s = "aaacb"
Output:
3
Explanation:
The substrings containing at least one occurrence of the characters a, b and c are "aaacb", "aacb" and "acb".
Example 3:
Input: s = "abc"
Output:
1
Constraints:
  • 3 <= s.length <= 5 x 10^4
  • s only consists of a, b or c characters.

解題

注意: Substring 可以重複
func numberOfSubstrings(s string) int {
arr := []int{0, 0, 0}
left := 0
right := 0
ans := 0
​
for right < len(s) {
arr[s[right] - 'a']++
​
for left <= right && arr[0] > 0 && arr[1] > 0 && arr[2] > 0 {
arr[s[left] - 'a']--
left++
ans += len(s) - right
}
​
right++
}
​
return ans
}