ich hab' noch keine Idee, aber spontan ist mir eingefallen, das man es von hinten aufzäumen könnte. Da dort die Grenzen noch offensichtlicher sind, ist ein Code leichter gefunden
Man holt sich also den größt möglichen Ausschnitt, der doppelt vorkommen kann (length div 2) und vergleicht den mit dem Rest.
Gleich, dann gefunden
Ungleich, dann Ausschnitt ein Wert (Byte/Zeichen) kürzer. Ab jetzt muss man die aktuelle Ausschnitt-Länge im Offset verschieben, bis Restzeichen weniger als Ausschnitt-Länge sind.
Jetzt kommt sicher gleich jemand, der Algorithmus XYZ präsentiert, der die Aufgabe elegant und schnell löst