Счётчик гласных для школьного чата

тема: Строки · уровень: базовый

Условие

В школьном чате классный руководитель придумал «вокалометр»: чем больше гласных в сообщении, тем оно «добрее».

Считайте, сколько символов сообщения — это английские гласные. Гласные считаются по набору: a, e, i, o, u, y (и их заглавные варианты).

Формат ввода

Одна строка s — сообщение.

Формат вывода

Выведите одно целое число — сколько в строке символов, которые являются гласными из набора a, e, i, o, u, y (регистр не важен).

Ограничения

Пример

Ввод:

Olympiad

Вывод:

4

Как решать — идея подхода

Приём: Линейный проход + множество (set) для проверки принадлежности

Ключевое наблюдение: нам не нужно искать подстроки или что-то сравнивать «по словам» — достаточно проверить каждый символ строки, является ли он гласной из фиксированного набора a, e, i, o, u, y (и в верхнем регистре тоже).

Приём: линейный проход по строке и проверка «принадлежит ли символ набору». Чтобы проверка была быстрой и простой, удобно хранить гласные в set: операция ch in vowels работает за O(1) в среднем.

План решения:

Сложность: O(n) по времени, где n — длина строки (до 2000), и O(1) по памяти (на фиксированный набор гласных).

Частая ошибка: сделать vowels строкой и каждый раз искать в ней через .find()/in — это тоже работает, но тогда проверка становится O(кол-во_гласных) и иногда пишут с ошибкой в регистре. Проще либо хранить обе версии букв в set, либо привести строку к одному регистру и хранить только маленькие.

Разберись руками

Есть сообщение: "Olympiad". Нужно понять, какие его буквы входят в набор гласных a, e, i, o, u, y (регистр не важен), и посчитать такие буквы.

Идея: Просматривай строку по символам: для каждого символа решай, является ли он гласной буквой из заданного набора (без учёта регистра). Если да — увеличивай счётчик. В конце выведи, сколько раз это случилось.

Решить задачу с автопроверкой на Python →

Куда дальше