Le problème : présence n’est pas répétition
Deux chaînes peuvent sembler faites des mêmes lettres sans être des anagrammes. L’exemple minimal est aab et abb : les deux contiennent un a et un b, mais aab a deux a et un b, tandis que abb a un a et deux b. Un ensemble de lettres ne retient que la présence ; il efface les répétitions. La vérification doit donc compter les occurrences, comme le rappelle la définition de l’anagramme : on réarrange toutes les lettres sans en ajouter ni en retirer, avec les mêmes répétitions (voir Tangente).
Pour une anagramme exacte, deux conditions sont nécessaires : la même longueur et, pour chaque caractère, le même nombre d’apparitions. La longueur seule ne suffit pas ; la présence seule ne suffit pas non plus. Le comptage est le cœur de la méthode.
Fixer la convention avant de compter
Avant de compter, il faut savoir ce que l’on compare. Une comparaison exacte de points de code Unicode distingue les majuscules, les minuscules, les espaces, les accents et les marques combinantes. C’est la convention décrite dans un exercice de validation d’anagramme : les chaînes sont comparées caractère par caractère, et la casse, les espaces et les accents comptent (voir Cachito). D’autres usages, notamment dans les jeux de lettres ou les vérificateurs en ligne, proposent d’ignorer la casse, les espaces, la ponctuation ou les diacritiques. Ce n’est pas une règle universelle : c’est un choix de comparaison (voir ZOVATOOL).
La convention doit être annoncée et appliquée aux deux chaînes. Si l’on ignore les accents, on transforme les deux textes de la même manière avant de compter. Si l’on ignore les espaces, on les retire des deux côtés. Sans cette symétrie, le résultat ne signifie rien.
Méthode en quatre étapes
- Vérifier la longueur. Deux chaînes de longueurs différentes ne peuvent pas être des anagrammes exactes. C’est un test rapide, mais pas suffisant.
- Lister les caractères à comparer. Selon la convention, on garde ou non les accents, les espaces, les apostrophes, les traits d’union et les ligatures. Pour un mot français simple, on peut travailler sur les lettres telles qu’elles sont écrites.
- Compter les occurrences. On peut utiliser un tableau de fréquences, une liste triée de lettres ou un compteur. Pour BARRE, on obtient B1, A1, R2, E1. Pour ARBRE, on obtient A1, R2, B1, E1.
- Comparer les compteurs. Si chaque caractère a le même nombre d’apparitions dans les deux chaînes, l’anagramme est exacte. Sinon, on identifie la lettre ajoutée, manquante ou répétée en trop.
Cette procédure est reproductible à la main et se transpose facilement à un programme. Un compteur comme Counter en Python compare directement les multiplicités ; l’important est de ne pas confondre la présence d’une lettre avec son nombre d’apparitions (voir Cachito).
Démonstration avec BARRE et ARBRE
Prenons deux mots français de cinq lettres : BARRE et ARBRE. Ils ont la même longueur. Comptons chaque lettre.
| Lettre | BARRE | ARBRE | Écart |
|---|---|---|---|
| A | 1 | 1 | 0 |
| B | 1 | 1 | 0 |
| E | 1 | 1 | 0 |
| R | 2 | 2 | 0 |
Les compteurs sont identiques. La signature alphabétique, c’est-à-dire la liste triée des lettres avec leurs occurrences, est A1 B1 E1 R2 pour les deux mots. On peut aussi écrire la suite triée A B E R R. BARRE et ARBRE sont donc des anagrammes exactes.
Le tableau montre pourquoi la lettre R doit être traitée à part : elle apparaît deux fois. Une vérification qui ne regarderait que la présence de A, B, E et R conclurait seulement que les mêmes lettres existent ; elle ne prouverait pas que les répétitions sont identiques. Ici, elles le sont ; dans BARRE et BARBE, elles ne le sont pas.
La méthode des écarts : +1 et -1
Une variante pratique consiste à compter les écarts. On parcourt la première chaîne en ajoutant 1 pour chaque lettre, puis la seconde en retirant 1 pour chaque lettre. Si tous les compteurs reviennent à zéro, les multiplicités sont égales. Cette idée est résumée par l’image d’un histogramme de lettres : on compare les hauteurs, pas seulement la liste des lettres présentes (voir MyBearIsYellow).
Pour BARRE et ARBRE : on part de B1, A1, R2, E1 pour BARRE. On lit ensuite ARBRE : A fait passer A à 0, R fait passer R à 1, B fait passer B à 0, R fait passer R à 0, E fait passer E à 0. Tous les compteurs sont à zéro. Pour BARRE et BARBE, le compteur de B augmenterait et celui de R diminuerait : l’écart n’est pas nul.
Cas particuliers : accents, espaces, ligatures
Les lettres répétées ne sont pas le seul point délicat. Les accents changent l’identité du caractère dans une comparaison exacte. café et face ne sont pas des anagrammes exactes : café contient un é, face contient un e. En revanche, si l’on décide d’ignorer les diacritiques, café devient cafe et face reste face ; les deux chaînes ont alors les mêmes lettres C, A, F, E. Le résultat dépend donc de la convention, et un outil qui propose « ignorer les accents » répond à une autre question que la comparaison exacte (voir ZOVATOOL).
Les espaces, apostrophes et traits d’union doivent aussi être traités explicitement. Dans une comparaison exacte, un espace est un caractère comme un autre. Si on l’ignore, il faut le retirer des deux côtés. Les ligatures demandent la même prudence : une ligature comme œ n’est pas automatiquement deux lettres o et e ; sans convention explicite, il ne faut pas l’assimiler à une suite de deux caractères. La règle générale reste simple : annoncer la convention, puis compter avec cette convention.
Anagramme exacte, sous-anagramme et joker
Une anagramme exacte utilise toutes les lettres avec les mêmes occurrences. Un mot plus court formé avec une partie des lettres n’est pas une anagramme exacte : c’est un mot construit sur une partie du tirage, parfois appelé sous-anagramme. Par exemple, BARRE et BAR partagent des lettres, mais BAR n’utilise pas le second R ni le E ; ce n’est pas une anagramme exacte.
Avec un joker, la vérification change de nature : une lettre peut remplacer une autre, donc les compteurs ne sont plus nécessairement égaux. Il faut alors vérifier si les différences peuvent être absorbées par le nombre de jokers disponibles. De même, une anagramme en plusieurs mots suppose souvent d’ignorer les espaces et la ponctuation ; c’est une convention à préciser. Ces distinctions évitent de présenter un résultat partiel comme une preuve d’anagramme exacte.
Exercice court
Niveau : débutant. Convention : comparaison exacte des caractères, sauf indication contraire. Répondez avant de lire les solutions.
- BARRE et ARBRE sont-ils des anagrammes exactes ? Donnez le tableau des fréquences.
- BARRE et BARBE : quelles lettres ont des occurrences différentes ? Conclusion ?
- café et face : sont-ils des anagrammes (a) en comparaison exacte des points de code, (b) si l’on ignore les diacritiques ?
Solutions et explications
- Oui. BARRE : A1, B1, E1, R2. ARBRE : A1, B1, E1, R2. Les compteurs sont identiques ; la signature A1 B1 E1 R2 est la même.
- BARRE contient B1 et R2 ; BARBE contient B2 et R1. Le B est répété une fois de plus dans BARBE, et il manque un R. Ce ne sont donc pas des anagrammes exactes.
- (a) Non : café contient é, face contient e. (b) Oui, si l’on applique la même règle aux deux chaînes : café devient cafe, et cafe/face ont les mêmes lettres C, A, F, E.
Ce qu’il faut retenir
Pour vérifier les lettres répétées dans une anagramme, comparez des multiplicités, pas des présences. Fixez la convention, vérifiez la longueur, comptez chaque caractère, puis comparez les compteurs ou les signatures. La méthode des écarts +1/-1 est une manière commode de contrôler le résultat. Enfin, distinguez l’anagramme exacte du mot formé avec une partie des lettres et du résultat avec joker : ce sont trois questions différentes. Pour replacer cette vérification dans une démarche plus large, le silo méthodes propose d’autres procédures.
FAQ
Pourquoi comparer des ensembles de lettres ne suffit-il pas ?
Un ensemble indique seulement si une lettre est présente, pas combien de fois. aab et abb contiennent les mêmes lettres, mais pas les mêmes répétitions.
Faut-il ignorer les accents et les espaces ?
Cela dépend de la convention choisie. Une comparaison exacte des points de code les conserve ; si on les ignore, il faut l’annoncer et appliquer la même règle aux deux chaînes.
Un mot plus court peut-il être une anagramme ?
Non, pas une anagramme exacte : il utilise seulement une partie des lettres. On parle alors de mot formé avec une partie des lettres ou de sous-anagramme.
Sources et références
- Cachito — Valid anagram: equality of multiplicities — https://cachito.dev/curriculum/01-code/02-data-structures-algorithms/problems/02-valid-anagram/
- Tangente — Anagramme : permuter les lettres pour jouer — https://tangente-mag.com/articles/glossaire-anagramme
- ZOVATOOL — Anagram Checker — https://zovatool.com/tool/anagram-checker
- MyBearIsYellow — Valid Anagram — https://www.mybearisyellow.me/algorithmes/valid-anagram/