Potresti usare gli schemi ... Per trovare la sottosequenza ripetuta più lunga prova questo ...
{1, 3, 6, 17, 19, 3, 6, 5, 4, 2, 5, 6, 17, 19, 3, 6, 7, 5, 78, 100,
101} /. {___, Longest[y___], ___, Longest[y___], ___} :> y
Restituisce Sequence [6,17,19,3,6]
Per trovare la sottosequenza ripetitiva non banale (vale a dire la lunghezza 2 o superiore) prova questo ...
{1, 3, 6, 17, 19, 3, 6, 5, 4, 2, 5, 6, 17, 19, 3, 6, 7, 5, 78, 100,
101} /. {___, Shortest[y___ /; Length[{y}] >= 2], ___,
Shortest[y___], ___} :> y
Questo restituisce Sequence[3,6]
Nota: le risposte vengono restituite come oggetti Sequence. Se, invece, vuoi ***
liste ***
restituito cambia il y
finale che appare dopo il simbolo :>
a {y}
.
Posso esprimere la stessa soluzione in termini più dettagliati come ...
{1, 3, 6, 17, 19, 3, 6, 5, 4, 2, 5, 6, 17, 19, 3, 6, 7, 5, 78, 100,
101} /. {BlankNullSequence[], Longest[y___], BlankNullSequence[],
Longest[y___], BlankNullSequence[]} :> y
{1, 3, 6, 17, 19, 3, 6, 5, 4, 2, 5, 6, 17, 19, 3, 6, 7, 5, 78, 100,
101} /. {BlankNullSequence[], Shortest[y___ /; Length[{y}] >= 2],
BlankNullSequence[], Shortest[y___], BlankNullSequence[]} :> y