Ctrl K

Одинаковые края на отрезках

Средняя
Дана строка text из строчных латинских букв и список запросов ranges. Запрос [l, r] выделяет кусок text[l..r] (оба конца включительно, нумерация с нуля). Назовём непустую подстроку *одноконечной*, если её первый и последний символы совпадают. В частности, любая подстрока из одного символа — одноконечная. Для каждого запроса посчитайте, сколько одноконечных подстрок есть внутри его куска. Подстроки на разных позициях считаются разными, даже если совпадают по тексту. Верните список ответов в порядке запросов.
Пример 1
text="banana", ranges=[[0, 5], [1, 3], [2, 2]] → [10, 4, 1]

В «banana» буква a встречается 3 раза (даёт 3·4/2 = 6 кусков), n — 2 раза (3 куска), b — 1 раз (1 кусок): всего 10. В «ana» — 3 + 1 = 4. Кусок из одной буквы — 1.

Пример 2
text="abba", ranges=[[0, 3]] → [6]

Подходят «a», «b», «b», «a», «bb» и сама «abba» — 6 кусков.

Ограничения
  • 2 ≤ len(text) ≤ 3·10⁴
  • text состоит из строчных латинских букв
  • 1 ≤ len(ranges) ≤ 3·10⁴
  • ranges[i] = [l, r], 0 ≤ l ≤ r < len(text)
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПиковая высота штоков насоса СложнаяСамые частые запросы СредняяСводка заходов по доменам СредняяПалиндром после пары правок СредняяРейтинг финалистов по голосам жюри Средняя
загружаем Python…
Вход
text="banana", ranges=[[0, 5], [1, 3], [2, 2]]
Ожидается
[10, 4, 1]

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