Сначала превратите 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 требует декодирования.