Skip to main content

1358.js

/** ------------------------------------------------------------------------------
*
* 1358. Number of Substrings Containing All Three Characters
* Topics: Hash Table, Sliding Window
* https://leetcode.com/problems/number-of-substrings-containing-all-three-characters/description/?envType=daily-question&envId=2025-03-11
*
------------------------------------------------------------------------------ */
/**
* @param {string} s
* @return {number}
*/
var numberOfSubstrings = function (s) {
let a = -1,
b = -1,
c = -1,
count = 0
for (let i = 0; i < s.length; i++) {
switch (s[i]) {
case "a":
a = i
break
case "b":
b = i
break
case "c":
c = i
break
}

if (a === -1 || b === -1 || c === -1) {
continue
}

const min = Math.min(a, b, c)
count += min + 1
}

return count
}

console.log(numberOfSubstrings("abcabc"))

/**
* @param {string} s
* @return {number}
*/
var numberOfSubstrings2 = function (s) {
let count = { a: 0, b: 0, c: 0 } // Track character count
let left = 0,
result = 0

for (let right = 0; right < s.length; right++) {
count[s[right]]++ // Expand window

// When all characters are in the window, move left pointer
while (count["a"] > 0 && count["b"] > 0 && count["c"] > 0) {
result += s.length - right // All substrings from left to end are valid
count[s[left]]--
left++ // Shrink window
}
}

return result
}