Подсчёт количества символов из первой строки во второй с учётом регистра

Сначала превратите pattern в множество, затем посчитайте символы source, принадлежащие этому множеству. Повтор символа в pattern не должен многократно увеличивать счётчик.

Короткий ответ

Что ответить на собеседовании

Сначала превратите pattern в множество, затем посчитайте символы source, принадлежащие этому множеству. Повтор символа в pattern не должен многократно увеличивать счётчик.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо написать функцию, принимающую две строки — одну с набором символов (pattern) и другую с произвольным текстом (source). Функция должна вернуть количество всех вхождений символов из первой строки в текст второй, при этом различать регистр.

/*
Example 1:
Input: pattern = "aA", source = "aAAbbbb"
Output: 3

Example 2:
Input: pattern = "z", source = "ZZ"
Output: 0
*/
int countMatches(std::string pattern, std::string source) {

}

Ответ

Сначала превратите pattern в множество, затем посчитайте символы source, принадлежащие этому множеству. Повтор символа в pattern не должен многократно увеличивать счётчик.

int countMatches(std::string pattern, std::string source) {
    std::unordered_set<char> allowed(pattern.begin(), pattern.end());
    int count = 0;
    for (char value : source)
        if (allowed.count(value)) ++count;
    return count;
}

Нужны и <unordered_set>. Регистр сохраняется, поэтому z и Z различаются. Предполагается, что результат помещается в int. Для однобайтового текста время в среднем O(|pattern| + |source|); std::string обходит байты, поэтому полноценная обработка Unicode требует декодирования.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее