Si le chevauchement est autorisé, cela peut être fait en temps linéaire (dans la taille de la chaîne d'entrée).
Quelques définitions
Définissons le concept de palindrome maximal :
Un palindrome maximal de rayon k d'une chaîne S est une sous-chaîne S 'telle que
- à partir du centre, S 'lit les mêmes k caractères dans les deux sens
- mais pas pour k + 1 caractères
- k> 1 (donc un seul caractère n'est pas un palindrome)
par exemple, si S = banana
, alors S' = anana
est un palindrome maximal de rayon 2.
Un palindrome maximal est un palindrome maximal de rayon k pour certains k.
Par exemple, si S = banana
, "ana"
, "anana"
, sont tous ses palindromes maximale.
Utilisation de palindromes maximaux
Maintenant, si nous pouvions localiser tous les palindromes maximaux d'une chaîne , il serait simple de vérifier si la chaîne entière est une concaténation de palindromes.
Prenez S = abbaccazayaz
. Ses palindromes maximaux sont:
- abba, centré entre la position 2 et 3, rayon = 2
- acca, centré entre la position 5 et 6, rayon = 2
- zayaz, centré en position 10, rayon = 2
donc "abba" s'étend sur [1..4], "acca" s'étend sur [4..7], "zayaz" s'étend sur [8..12]. Puisque la concaténation de ces trois palindromes (le chevauchement est autorisé?) S'étend sur toute la chaîne, il s'ensuit que "abbaccazayaz" est la concaténation des palindromes.
Calcul des palindromes maximaux en temps linéaire
Maintenant, il s'avère que nous pouvons localiser tous les palindromes maximaux d'une chaîne S en temps linéaire !*
L'idée est d'utiliser un arbre de suffixes pour S équipé de requêtes d'ancêtres communs à temps constant .
On peut donc vérifier si une chaîne S de longueur m est une concaténation de palindromes en temps O (n).
*
Gusfield, Dan (1997), "9.2 Trouver tous les palindromes maximaux en temps linéaire", Algorithmes sur les chaînes, les arbres et les séquences