Un mot Lyndon est une chaîne strictement lexicographiquement plus petite que n'importe laquelle de ses rotations cycliques. Étant donné une chaîne binaire, déterminez s'il s'agit d'un mot Lyndon en aussi peu d'octets que possible.
Par exemple, 001011
est un mot Lyndon. Ses rotations, répertoriées ci-dessous, sont obtenues en déplaçant à plusieurs reprises le premier symbole jusqu'à la fin.
001011
010110
101100
011001
110010
100101
Parmi ceux-ci, la chaîne d'origine vient lexicographiquement en premier, ou de manière équivalente, représente le plus petit nombre binaire.
Cependant, ce 001001
n'est pas un mot de Lyndon car l'une de ses rotations est la même que lui-même, ce qui le lie le plus tôt lexicographiquement.
Entrée: une chaîne binaire non vide ou une liste de chiffres 0
et 1
. Vous ne pouvez pas utiliser de chiffres, comme 5
pour représenter 101
.
Sortie: Une valeur Truthy ou Falsey cohérente qui indique si la chaîne est un mot Lyndon.
Les fonctions intégrées spécifiquement pour les mots Lyndon ne sont pas autorisées.
Cas de test:
Les mots Lyndon d'une longueur maximale de 6 sont:
0
1
01
001
011
0001
0011
0111
00001
00011
00101
00111
01011
01111
000001
000011
000101
000111
001011
001101
001111
010111
011111
Les mots non lyndons d'une longueur maximale de 4 sont:
00
10
11
000
010
100
101
110
111
0000
0010
0100
0101
0110
1000
1001
1010
1011
1100
1101
1110
1111
Classement:
x
égale àx
?