Je cherche un moyen de tester si une chaîne donnée se répète ou non pour toute la chaîne.
Exemples:
[
'0045662100456621004566210045662100456621', # '00456621'
'0072992700729927007299270072992700729927', # '00729927'
'001443001443001443001443001443001443001443', # '001443'
'037037037037037037037037037037037037037037037', # '037'
'047619047619047619047619047619047619047619', # '047619'
'002457002457002457002457002457002457002457', # '002457'
'001221001221001221001221001221001221001221', # '001221'
'001230012300123001230012300123001230012300123', # '00123'
'0013947001394700139470013947001394700139470013947', # '0013947'
'001001001001001001001001001001001001001001001001001', # '001'
'001406469760900140646976090014064697609', # '0014064697609'
]
sont des chaînes qui se répètent, et
[
'004608294930875576036866359447',
'00469483568075117370892018779342723',
'004739336492890995260663507109',
'001508295625942684766214177978883861236802413273',
'007518796992481203',
'0071942446043165467625899280575539568345323741',
'0434782608695652173913',
'0344827586206896551724137931',
'002481389578163771712158808933',
'002932551319648093841642228739',
'0035587188612099644128113879',
'003484320557491289198606271777',
'00115074798619102416570771',
]
sont des exemples de ceux qui ne le font pas.
Les sections répétitives des chaînes qui me sont données peuvent être assez longues et les chaînes elles-mêmes peuvent contenir 500 caractères ou plus, donc parcourir chaque caractère en essayant de créer un modèle puis en vérifiant le modèle par rapport au reste de la chaîne semble terriblement lent. Multipliez cela par des centaines de chaînes et je ne vois aucune solution intuitive.
J'ai un peu examiné les expressions rationnelles et elles semblent bonnes lorsque vous savez ce que vous recherchez, ou au moins la longueur du motif que vous recherchez. Malheureusement, je ne connais ni l'un ni l'autre.
Comment savoir si une chaîne se répète et si c'est le cas, quelle est la sous-séquence répétée la plus courte?