1358. Number of Substrings Containing All Three Characters

El texto de la tarea se traduce del ruso para el idioma seleccionado. El código no cambia.

Дана cadena s, состоящая только из символов a, b и c.

return количество подстрок, содержащих хотя бы одно вхождение всех этих символов a, b и c.

Ejemplo

Input: s = "abc"

Output: 1

C# solución

coincidente/original
public class Solution {
    public int NumberOfSubstrings(string s) {
        int count = 0;
        int[] charCount = new int[3];
        int i = 0;
        
        for (int j = 0; j < s.Length; j++) {
            charCount[s[j] - 'a']++;
            
            while (charCount[0] > 0 && charCount[1] > 0 && charCount[2] > 0) {
                count += s.Length - j;
                charCount[s[i] - 'a']--;
                i++;
            }
        }
        
        return count;
    }
}

C++ solución

borrador automático, revisar antes de enviar
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public int NumberOfSubstrings(string s) {
        int count = 0;
        vector<int>& charCount = new int[3];
        int i = 0;
        
        for (int j = 0; j < s.size(); j++) {
            charCount[s[j] - 'a']++;
            
            while (charCount[0] > 0 && charCount[1] > 0 && charCount[2] > 0) {
                count += s.size() - j;
                charCount[s[i] - 'a']--;
                i++;
            }
        }
        
        return count;
    }
}

Java solución

coincidente/original
public class Solution {
    public int numberOfSubstrings(String s) {
        int count = 0;
        int[] charCount = new int[3];
        int i = 0;
        
        for (int j = 0; j < s.length(); j++) {
            charCount[s.charAt(j) - 'a']++;
            
            while (charCount[0] > 0 && charCount[1] > 0 && charCount[2] > 0) {
                count += s.length() - j;
                charCount[s.charAt(i) - 'a']--;
                i++;
            }
        }
        
        return count;
    }
}

JavaScript solución

coincidente/original
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;
};

Python solución

coincidente/original
class Solution:
    def numberOfSubstrings(self, s: str) -> int:
        count = 0
        char_count = {'a': 0, 'b': 0, 'c': 0}
        i = 0
        
        for j in range(len(s)):
            char_count[s[j]] += 1
            
            while all(char_count[char] > 0 for char in "abc"):
                count += len(s) - j
                char_count[s[i]] -= 1
                i += 1
        
        return count

Algorithm

Инициализация указателей и счетчиков:

Создайте три указателя i, j, и count для отслеживания текущего положения в строке и подсчета подстрок. Используйте словарь для подсчета вхождений символов a, b, и c.

Расширение окна:

Перемещайте правый указатель j по строке и увеличивайте счетчики символов в словаре. Как только все три символа (a, b, и c) присутствуют в текущем окне, начинайте уменьшать левый указатель i.

Уменьшение окна и подсчет подстрок:

Для каждого сдвига i вправо, проверяйте наличие всех символов в текущем окне. Если все символы присутствуют, добавьте количество подстрок, заканчивающихся в позиции j, к общему счету. Сдвигайте i вправо до тех пор, пока Enunciado выполнения не нарушится.

return итоговое количество подстрок.

😎

Vacantes para esta tarea

Se muestran vacantes activas con etiquetas coincidentes.

Todas las vacantes
Todavía no hay vacantes activas.