Aller au contenu principal
U/
Dyn. prog
polyglotte

Plus longue sous-séquence commune (LCS)

Implémenter l'algorithme de programmation dynamique pour trouver la longueur et une instance de la plus longue sous-séquence commune (LCS) entre deux chaînes de caractères.

60 minPublié le 20 mai 2026Proposé par Anonyme

Défi

// Lisez attentivement, codez sur votre machine

Énoncé

Le programme lit deux chaînes de caractères (une par ligne) et affiche deux lignes : la longueur de la plus longue sous-séquence commune, puis une instance de cette sous-séquence. Une sous-séquence est obtenue en supprimant zéro ou plusieurs caractères sans modifier l'ordre des caractères restants (les caractères ne doivent pas être contigus). Plusieurs sous-séquences communes de longueur maximale peuvent exister : n'importe laquelle convient, seule sa longueur est imposée. Les exemples ci-dessous en montrent une parmi les réponses valides.

Contraintes

  • Chaque chaîne contient entre 0 et 1 000 caractères ASCII imprimables.
  • Si l'une des chaînes est vide, la LCS est vide et sa longueur est 0 — afficher 0 puis une ligne vide.
  • La comparaison est sensible à la casse.
  • Complexité attendue : O(N × M) en temps et en espace.
  • Solution réalisable dans tout langage généraliste avec sa seule bibliothèque standard.

Exemple

Entrée :
ABCBDAB
BDCAB

Sortie :
4
BCAB
Entrée :
AGGTAB
GXTXAYB

Sortie :
4
GTAB
Espace solution
// À garder en tête
  • D'abord, faire marcher

    On ne cherche pas à optimiser : d'abord, on fait marcher le truc. Optimiser vient ensuite — et ça aussi, ça s'apprend. (Si un défi porte sur l'optimisation, son énoncé le précise.)

  • Pas de mauvaise réponse

    Il n'y a pas de mauvaise réponse à un défi. Le but, c'est de le faire. Ce qui compte, c'est de s'entraîner.

  • Trop dur ? Au suivant

    Un défi te résiste ? N'hésite pas à en prendre un autre. Ils seront encore là demain.