Voilà comment je l'avais compris :
- Le script récupère toutes les balises d'un texte.
- Chaque balise est examinée individuellement.
- Si une balise n'est pas ouvrante, on cherche des candidats de balises fermantes (candidats qui correspondent à toutes les balises du texte qui n'ont pas encore été ajoutées en séquence)
- Si la balise est fermante (et là on entre dans ma version), on vérifie si le candidat actuel n'est pas situé plus loin que la balise actuelle dans l'index des balises présentes dans le texte : une balise fermante a besoin d'être examinée par les balises qui la précèdent, pas qui la suivent.
- Tant qu'on n'a pas dépassé l'index de la balise fermante, tout candidat "ouvrant" est le candidat valide pour la balise fermante en cours d'examen. On cherche la séquence ouverture/fermeture la plus courte possible parmi les balises encore non-validées.
Dans l'idée, cela reste d'essayer de trouver pour une balise fermante trouvée, la balise ouvrante la plus proche.