Сложность: medium
Дана строка s, состоящая только из символов a, b и c.
Верните количество подстрок, содержащих хотя бы одно вхождение всех этих символов a, b и c.
Пример:
Input: s = "abc"
Output: 1
👨💻 Алгоритм:
1⃣Инициализация указателей и счетчиков:
Создайте три указателя i, j, и count для отслеживания текущего положения в строке и подсчета подстрок. Используйте словарь для подсчета вхождений символов a, b, и c.
2⃣Расширение окна:
Перемещайте правый указатель j по строке и увеличивайте счетчики символов в словаре. Как только все три символа (a, b, и c) присутствуют в текущем окне, начинайте уменьшать левый указатель i.
3⃣Уменьшение окна и подсчет подстрок:
Для каждого сдвига i вправо, проверяйте наличие всех символов в текущем окне. Если все символы присутствуют, добавьте количество подстрок, заканчивающихся в позиции j, к общему счету. Сдвигайте i вправо до тех пор, пока условие выполнения не нарушится.
Верните итоговое количество подстрок.
😎 Решение:
var numberOfSubstrings = function(s) {
let count = 0;
let charCount = { 'a': 0, 'b': 0, 'c': 0 };
let i = 0;
for (let j = 0; j < s.length; j++) {
charCount[s[j]]++;
while (charCount['a'] > 0 && charCount['b'] > 0 && charCount['c'] > 0) {
count += s.length - j;
charCount[s[i]]--;
i++;
}
}
return count;
};Ставь 👍 и забирай 📚 Базу знаний