Lokale Zeiträume
Nehmen Sie eine nicht leere Zeichenfolge s . Die lokale Periode von s am Index i ist die kleinste positive ganze Zahl n, so dass wir für jede 0 ≤ k <n s [i + k] = s [i-n + k] haben, wenn beide Seiten definiert sind. Alternativ ist es die minimale Länge einer nicht leeren Zeichenfolge w, so dass, wenn die Verkettung ww neben s platziert wird, so dass die zweite Kopie von w am Index i von s beginnt , die beiden Zeichenfolgen übereinstimmen, wo immer sie sich überlappen.
Als Beispiel berechnen wir die lokale Periode von s = "abaabbab" bei (0-basiertem) Index 2.
- Versuchen Sie n = 1 : dann ist s [2 + 0] ≠ s [2-1 + 0] , daher ist diese Auswahl nicht korrekt.
- Versuchen n = 2 : dann ist s [2 + 0] = s [2-2 + 0], aber s [2 + 1] ≠ s [2-2 + 1] , also ist dies auch nicht korrekt.
- Versuchen Sie es mit n = 3 : dann s [2 + 0-3] nicht definiert, s [2 + 1] = s [2-3 + 1] und s [2 + 2] = s [2-3 + 2] . Somit ist die Ortszeit 3.
Hier ist eine Visualisierung der lokalen Perioden mit der zweiten Definition, wobei der Übersichtlichkeit halber Semikolons zwischen den beiden Kopien von w eingefügt sind :
index a b a a b b a b period
0 a;a 1
1 b a;b a 2
2 a a b;a a b 3
3 a;a 1
4 b b a b a a;b b a b a a 6
5 b;b 1
6 a b b;a b b 3
7 b a;b a 2
Beachten Sie, dass w nicht unbedingt eine Unterzeichenfolge von s ist . Dies geschieht hier im Fall von Index-4.
Die Aufgabe
Ihre Eingabe ist eine nicht leere Zeichenkette s von Klein ASCII - Zeichen. Falls gewünscht, kann es als Liste von Zeichen verwendet werden. Ihre Ausgabe soll die Liste sein, die die lokale Periode von s an jedem ihrer Indizes enthält. Im obigen Beispiel wäre die korrekte Ausgabe [1,2,3,1,6,1,3,2] .
Die niedrigste Byteanzahl in jeder Sprache gewinnt. Es gelten die Standardregeln für Code-Golf .
Testfälle
a -> [1]
hi -> [1, 2]
www -> [1, 1, 1]
xcxccxc -> [1, 2, 2, 5, 1, 3, 2]
abcbacb -> [1, 4, 7, 7, 7, 3, 3]
nininini -> [1, 2, 2, 2, 2, 2, 2, 2]
abaabbab -> [1, 2, 3, 1, 6, 1, 3, 2]
woppwoppw -> [1, 4, 4, 1, 4, 4, 4, 1, 4]
qwertyuiop -> [1, 10, 10, 10, 10, 10, 10, 10, 10, 10]
deededeededede -> [1, 3, 1, 5, 2, 2, 5, 1, 12, 2, 2, 2, 2, 2]
abababcabababcababcabababcaba -> [1, 2, 2, 2, 2, 7, 7, 7, 7, 2, 2, 2, 19, 19, 5, 5, 2, 5, 5, 12, 12, 2, 2, 2, 7, 7, 5, 5, 2]
;in Ihrem Beispiel ist). Das würde die führende 1 loswerden.
qwertyuiopist w eine gedrehte Version vonqwertyuiop. Siehe auch das Beispiel bei Index 4: w ist nicht unbedingt ein Teilstring von s .