Счётчик гласных для школьного чата
Условие
В школьном чате классный руководитель придумал «вокалометр»: чем больше гласных в сообщении, тем оно «добрее».
Считайте, сколько символов сообщения — это английские гласные. Гласные считаются по набору: a, e, i, o, u, y (и их заглавные варианты).
Формат ввода
Одна строка s — сообщение.
Формат вывода
Выведите одно целое число — сколько в строке символов, которые являются гласными из набора a, e, i, o, u, y (регистр не важен).
Ограничения
1 ≤ len(s) ≤ 2000- Строка состоит только из английских букв
A–Zиa–z.
Пример
Ввод:
Olympiad
Вывод:
4Как решать — идея подхода
Приём: Линейный проход + множество (set) для проверки принадлежности
Ключевое наблюдение: нам не нужно искать подстроки или что-то сравнивать «по словам» — достаточно проверить каждый символ строки, является ли он гласной из фиксированного набора a, e, i, o, u, y (и в верхнем регистре тоже).
Приём: линейный проход по строке и проверка «принадлежит ли символ набору». Чтобы проверка была быстрой и простой, удобно хранить гласные в set: операция ch in vowels работает за O(1) в среднем.
План решения:
- Создай набор гласных, например
vowels = set('aeiouyAEIOUY'). - Заведи счётчик
cnt = 0. - Пройди циклом по всем символам
chв строке. - Если
ch in vowels, увеличьcntна 1. - Выведи
cnt.
Сложность: O(n) по времени, где n — длина строки (до 2000), и O(1) по памяти (на фиксированный набор гласных).
Частая ошибка: сделать vowels строкой и каждый раз искать в ней через .find()/in — это тоже работает, но тогда проверка становится O(кол-во_гласных) и иногда пишут с ошибкой в регистре. Проще либо хранить обе версии букв в set, либо привести строку к одному регистру и хранить только маленькие.
Разберись руками
Есть сообщение: "Olympiad". Нужно понять, какие его буквы входят в набор гласных a, e, i, o, u, y (регистр не важен), и посчитать такие буквы.
- Отметь в строке "Olympiad" позиции (индексы с 0) тех символов, которые являются гласными из набора a,e,i,o,u,y (и заглавные тоже).
- Сколько всего отмеченных позиций получилось (то есть сколько гласных букв в "Olympiad")?
- Что мы делали с каждой буквой строки, чтобы получить ответ?
Идея: Просматривай строку по символам: для каждого символа решай, является ли он гласной буквой из заданного набора (без учёта регистра). Если да — увеличивай счётчик. В конце выведи, сколько раз это случилось.
Решить задачу с автопроверкой на Python →
Куда дальше
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт
- Олимпиада по информатике: с чего начать — два мира олимпиад — ВсОШ и перечневые: этапы, задания и на каком языке писать
- На программиста по олимпиаде: путь по классам — что даёт диплом, куда с ним берут на ИТ-направления и почему решает 9 класс