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). Si plusieurs LCS de même longueur existent, afficher celle obtenue par remontée de la matrice de DP de haut-gauche vers bas-droite (choix lexicographique déterministe).

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

Proposer une solution

Connectez-vous ou créez un compte pour envoyer votre code (aucune exécution côté serveur — on stocke juste le texte pour la communauté).

// À 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.