Wenn Sie eine Zeichenfolge als Argument angeben, geben Sie die Länge der längsten nicht überlappenden wiederholten Teilzeichenfolge (n) oder Null aus, wenn keine solche Zeichenfolge vorhanden ist.
Sie können davon ausgehen, dass die Eingabezeichenfolge nicht leer ist.
Beispiele
abcdefabc
: Der Teilstring abc
wird an den Positionen 1 und 7 wiederholt, daher sollte das Programm 3 ausgeben
abcabcabcabcab
: abcabc
oder bcabca
oder cabcab
werden wiederholt, daher sollte das Programm 6 ausgeben . (Die Teilzeichenfolge abcabcabcab
wird ebenfalls wiederholt, die Vorkommen überlappen sich jedoch, sodass wir sie nicht akzeptieren.)
aaaaaaa
: aaa
wird beispielsweise an den Positionen 1 und 4 wiederholt, daher sollte das Programm 3 ausgeben
abcda
: a
wird wiederholt, daher sollte das Programm 1 ausgeben
xyz
: keine wiederholte Zeichenfolge → 0
ababcabcabcabcab
: sollte zurückkehren 6
Das ist Code-Golf , also gewinnen die wenigsten Bytes.
quelle
Antworten:
Brainfuck, 226 Bytes
Formatiert:
Erwartet eine Eingabe mit oder ohne nachfolgende Newline und gibt das Ergebnis als Byte-Wert aus .
Probieren Sie es online aus.
Dadurch wird für jedes Präfix geprüft, ob es später in der Zeichenfolge vorkommt. Anschließend wird das erste Zeichen abgeschnitten und der Vorgang wiederholt, bis keine Zeichen mehr übrig sind.
Das Band ist in 3-Zellen-Knoten unterteilt.
c 0 f
Dabei
c
handelt es sich um ein Zeichen der angegebenen Zeichenfolge undf
um ein Flag, das entweder eins, negativ eins oder null sein kann. Nicht-Null-Flags werden zwischen die beiden Zeichen gesetzt, die gerade verglichen werden, und negative Flags sind für die Zellen nach dem Ende des aktuellen Präfixes und vor dem Beginn des aktuellen Suffixes (dh vor dem Index der aktuellen potenziellen Übereinstimmung) reserviert.Das Ergebnis wird links von der Zeichenfolge gespeichert und aktualisiert, sobald eine Übereinstimmung gefunden wird.
(Die Zeichenfolge wird tatsächlich in umgekehrter Reihenfolge mit einem
\x01
angehängten Text verarbeitet .)quelle
Gelee , 12 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
œ-Q
ist wirklich ordentlich.Perl 6 , 36 Bytes
Versuch es
Erweitert:
quelle
Retina ,
353230 BytesZiemlich coole Herausforderung.
Probieren Sie es online aus
Erläuterung:
quelle
M%`.
als zweite Stufe verwenden.JavaScript (ES6),
796866 BytesBearbeiten:
1113 Bytes dank @Arnauld gespeichert.quelle
Haskell , 79 Bytes
Probieren Sie es online!
quelle
%
eine nicht zusammenhängendeaa
axayaa
a%d
ist falsch, aber auch unnötig. Was auch bedeutet, dass Siemax
anstelle von verwenden könnenmaximum
.a%d
um""%d
es zu beheben.a
leer ist.sum[1|(x,y)<-zip a c,x==y]
kann anstelle von verwendet werdena!c
.Python 3 ,
7572 BytesProbieren Sie es online!
quelle
JavaScript, 120
quelle
Schale , 11 Bytes
Probieren Sie es online!
Hinweis: Hülsen sind neuer als diese Herausforderung.
Erläuterung
quelle
Perl 5 mit
-p
40 BytesProbieren Sie es online!
quelle
Mathematica,
7565 Bytes10 Bytes gespart durch @JingHwan min .
Anonyme Funktion. Nimmt einen String als Eingabe und gibt eine Zahl als Ausgabe zurück.
quelle
BlankNullSequence (___)
wennOverlaps->All
es da ist.Max@StringLength@StringCases[#,a___~~___~~a___:>a,Overlaps->All]&
wäre in Ordnung.StringReplace
: PPyth - 16 Bytes
Ich muss Golf spielen, indem ich alle Saiten in Längen umwandle und die max.
Test Suite .
quelle
Clojure, 112 Bytes
Schleifen zweimal über Zahlen
0
bisn - 1
(n
Länge der Zeichenfolge), löschen vonj
Zeichen und Aufteilen des Restes in "Anfang" - und "Ende" -Teile. Erstellt eine Menge aller Teilzeichenfolgen mite
der Längeb
und prüft anhand dieser Funktion, obb
sie von dort gefunden werden. Liefert die Länge vonb
if found und sonst 0, gibt das Maximum dieser Werte zurück.Wäre interessant, eine kürzere Version zu sehen.
quelle
Retina , 24 Bytes
Probieren Sie es online!
Ein Warmup für mich, um die neuen Funktionen von Retina 1 zu lernen.
Erläuterung
Eine Listenstufe
(.*).*\1
, die alle Übereinstimmungen für den regulären Ausdruck zurückgibt , der mit einem Muster der Form "ABA" übereinstimmt, wobei A und B zwei beliebige Teilzeichenfolgen sind (möglicherweise leer). Die zusätzlichen Optionen für diese Phase sindv
: Berücksichtigt überlappende Übereinstimmungen und$
ersetzt jede Übereinstimmung, bevor sie zurückgegeben wird. Die Substitution wird in der zweiten Zeile angezeigt und entspricht der Länge (.
) der ersten Erfassungsgruppe ( Dies wäre die Teilzeichenfolge "A" im vorherigen Beispiel.Wir haben jetzt alle Längen wiederholter Teilzeichenfolgen, diese Stufe sortiert sie einfach in numerischer Reihenfolge, von der kürzesten bis zur längsten.
Schließlich
G
behält diese grep-Stufe ( ) nur das-1
Ergebnis last ( ) bei, dh die Länge der längsten wiederholten Teilzeichenfolge.quelle
Javascript, 165 Bytes
Testfälle
quelle
ababcabcabcabcab
, aber die Zeichenfolgecabcab
wird wiederholt.