1358. Number of Substrings Containing All Three Characters

선택한 UI 언어에 맞게 문제 텍스트를 러시아어에서 번역합니다. 코드는 변경하지 않습니다.

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

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

예제

Input: s = "abc"

Output: 1

C# 해법

매칭됨/원본
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++ 해법

자동 초안, 제출 전 검토
#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 해법

매칭됨/원본
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 해법

매칭됨/원본
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 해법

매칭됨/원본
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 вправо до тех пор, пока 문제 설명 выполнения не нарушится.

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

😎

Vacancies for this task

활성 채용 with overlapping task tags are 표시됨.

전체 채용
아직 활성 채용이 없습니다.