📜 Условие:
Дана строка
s длиной до 2⋅10⁵, содержащая только строчные буквы латинского алфавита. Нужно найти максимальную длину `L`, такую что существует строка длины `L`, встречающаяся всего один раз в
s.🔍 Пример:
s = "ababcab"
Уникальные подстроки:
длины 1: "c" ✅
длины 2: "ca" ✅
длины 3: "cab" ✅
длины 4: "abca" ✅
Но, например, "ab" встречается дважды.
Ответ: 4
⚠️ Ограничения:
- Длина строки: до
200000- Время — не более 1 секунды
- Нельзя использовать
map[string]int наивно — будет слишком медленно- Решение должно работать за O(n log n) или O(n) с префикс-хэшами
💡 Подсказки:
- Используй **rolling hash (polynomial hashing)** — префиксный хэш + бинарный поиск по длине `L`.
- Сначала бинарный поиск по длине: `left = 1`, `right = len(s)`
- Для каждой длины — собрать все хэши и проверить, есть ли хэш с ровно одним вхождением
- Возможна коллизия — используйте **двойной хэш** или `uint64` с Mersenne prime
✅ Что проверяет задача:
- Умение применять двухфазные алгоритмы (бинарный поиск + проверка условия)
- Навыки работы с rolling hash / префикс-хэшами
- Знание тонкостей коллизий и оптимизации по памяти
Пиши решение в комментариях