Distância mínima entre substrings repetidas

Java Hard strings

Tarefa «Distância mínima entre substrings repetidas»

Dada uma string S composta por letras minúsculas do alfabeto latino. É necessário encontrar a distância mínima entre os índices iniciais de duas substrings idênticas e não sobrepostas de comprimento L, onde L é o maior comprimento possível para o qual tais substrings existem. Se não houver substrings idênticas e não sobrepostas de comprimento L, imprimir -1. A distância é a diferença entre os índices iniciais da segunda e da primeira substring. As substrings não devem se sobrepor (ou seja, seus intervalos não possuem caracteres em comum). Restrições: comprimento da string de até 10^5.

Formato de Entrada

Uma única string S composta por letras minúsculas do alfabeto latino (a-z). O comprimento da string varia de 1 a 100000.

Formato de Saída

Um único número inteiro — a distância mínima entre os índices iniciais de duas substrings idênticas e não sobrepostas de comprimento máximo possível L, ou -1 se tais substrings não existirem.

Exemplos

Exemplo 1

ENTRADA
aababc
SAÍDA
2

Exemplo 2

ENTRADA
ababa
SAÍDA
2

Exemplo 3

ENTRADA
abcdefg
SAÍDA
-1
main.java