Ctrl K

Сумма разнообразия подстрок

Сложная
Назовём **разнообразием** строки количество различных букв в ней. Например, у строки "banana" разнообразие равно 3: в ней встречаются только a, b и n. Дана строка text. Рассмотрите все её непустые подстроки — непрерывные куски строки, причём одинаковые по содержанию куски, стоящие на разных позициях, считаются разными. Верните сумму их разнообразий. Перебор всех подстрок занимает O(n²) и больше — попробуйте обойтись одним проходом.
Пример 1
text='kayak' → 30

Однобуквенные подстроки дают 5. Двухбуквенные «ka», «ay», «ya», «ak» — по 2, итого 8. Трёхбуквенные «kay», «aya», «yak» — 3 + 2 + 3 = 8. Четырёхбуквенные «kaya» и «ayak» — по 3, итого 6. Вся строка — 3. Сумма: 5 + 8 + 8 + 6 + 3 = 30.

Пример 2
text='mmm' → 6

Шесть подстрок, и в каждой ровно одна различная буква.

Пример 3
text='xyz' → 10
Ограничения
  • 1 ≤ len(text) ≤ 10⁵
  • text состоит только из строчных латинских букв
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиВсе способы расставить пробелы СложнаяОдинокие буквы во всех подстроках СложнаяДлина разросшегося слова СложнаяУравнять частоты букв СложнаяРазбиение на слова из словаря Средняя
загружаем Python…
Вход
text='kayak'
Ожидается
30

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