Betrachten Sie die folgenden Definitionen aus Die Anzahl der Läufe in einer Zeichenfolge von W. Rytter. Beachten Sie, dass Wort, Zeichenfolge und Teilzeichenfolge ungefähr Synonyme sind.
Ein Lauf in einer Zeichenfolge ist ein nicht erweiterbares (mit derselben minimalen Periode) periodisches Segment in einer Zeichenfolge.
Eine Periode p eines Wortes w ist eine positive ganze Zahl p, so dass w [i] = w [i + p] ist, wenn beide Seiten dieser Gleichung definiert sind. Per (w) bezeichne die Größe der kleinsten Periode von w. Wir sagen, dass ein Wort w periodisch ist, wenn per (w) <= | w | / 2.
Betrachten Sie zum Beispiel die Zeichenfolge x = abcab. per(abcab) = 3wie x[1] = x[1+3] = a, x[2]=x[2+3] = bund es gibt keine kleinere Periode. Die Zeichenfolge abcabist daher nicht periodisch. Die Zeichenfolge ababist jedoch periodisch gemäß (abab) = 2.
Ein Lauf (oder eine maximale Periodizität) in einem String w ist ein Intervall [i ... j] mit j> = i, so dass
- w [i ... j] ist ein periodisches Wort mit der Periode p = per (w [i ... j])
- Es ist maximal. Formal ist weder w [i-1] = w [i-1 + p] noch w [j + 1] = w [j + 1-p]. Informell kann der Lauf nicht in einem größeren Lauf mit derselben Periode enthalten sein.
Bezeichne mit RUNS (w) die Menge der Läufe von w.
Beispiele
Die vier Läufe von atattattsind [4,5] = tt, [7,8] = tt, [1,4] = atat, [2,8] = tattatt.
Die Zeichenfolge aabaabaaaacaacacenthält die folgenden 7 Läufe:
[1,2] = aa, [4,5] = aa, [7,10] = aaaa, [12,13] = aa, [13,16] = acac, [1,8] = aabaabaa, [9 , 15] = Aacaaca.
Ihre Ausgabe sollte eine Liste von Läufen sein. Jeder Lauf sollte das Intervall angeben, das er darstellt, muss jedoch den Teilstring selbst nicht ausgeben. Die genaue Formatierung kann beliebig sein.
In den Beispielen wird die 1-Indizierung verwendet. Sie können jedoch stattdessen die 0-Indizierung verwenden, wenn dies bequemer ist.
AUFGABE
Schreiben Sie Code, der eine Zeichenfolge w angibt, und geben Sie RUNS (w) aus.
Sprachen und Eingabe
Sie können eine beliebige Sprache verwenden und die Eingabezeichenfolge in der am besten geeigneten Form verwenden. Sie müssen jedoch ein vollständiges Programm angeben und ein Beispiel für Ihren Code anzeigen, der auf der Beispieleingabe ausgeführt wird.
class A{public static ...}jedes Mal schreiben müsste, wenn ich Golfcode spielen wollte