Ctrl K

Гласные по краям: запросы на отрезках

Средняя
Дан список слов words и список запросов ranges, где ranges[i] = [l, r]. Назовём слово обрамлённым, если оно и начинается, и заканчивается гласной; гласные — это a, e, i, o, u. Для каждого запроса посчитайте, сколько обрамлённых слов среди words[l], words[l + 1], …, words[r] (оба конца включительно, нумерация с нуля). Верните ответы в порядке запросов. Запросов может быть очень много — пересчитывать каждый отрезок заново слишком долго.
Пример 1
words=["opera", "tree", "eye", "ink", "a"], ranges=[[0, 4], [1, 3], [3, 3]] → [3, 1, 0]

Гласными с обеих сторон обрамлены "opera", "eye" и "a" (индексы 0, 2, 4). В отрезке [0, 4] их три, в [1, 3] — одно слово "eye", в [3, 3] — ни одного. Ответ [3, 1, 0].

Пример 2
words=["sky", "cat"], ranges=[[0, 1], [1, 1]] → [0, 0]

Ни одно слово не начинается с гласной, поэтому все ответы нулевые.

Пример 3
words=["idea", "oboe", "area"], ranges=[[0, 2], [2, 2], [0, 1]] → [3, 1, 2]
Ограничения
  • 1 ≤ len(words) ≤ 10⁵
  • 1 ≤ len(words[i]) ≤ 40, только строчные латинские буквы
  • Суммарная длина всех слов ≤ 3 · 10⁵
  • 1 ≤ len(ranges) ≤ 10⁵
  • 0 ≤ l ≤ r < len(words)
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПрокрутка букв по префиксам СредняяПалиндром после пары правок СредняяСобрать все шары в одной коробке СредняяКниги между подпорками СредняяПрокрутка букв по отрезкам Средняя
загружаем Python…
Вход
words=["opera", "tree", "eye", "ink", "a"], ranges=[[0, 4], [1, 3], [3, 3]]
Ожидается
[3, 1, 0]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 97 тестов на сервере, включая скрытые.