J'essaye d'écrire une fonction qui calcule la longueur de la plus longue sous-séquence commune des deux chaînes d'entrée str1
et str2
.La longueur de la plus longue sous-séquence commune de deux chaînes
C'est ce que j'ai en ce moment,
(define LCS
(lambda (str1 str2)
(if (OR (equal? str1 "") (equal? str2 ""))
0
(if (equal? (string-contains str1 (string-ref str2 0)) #t)
(+ 1 (LCS (substring str1 1 (string-length str1))
(substring str2 1 (string-length str2))))
(LCS (substring str1 1 (string-length str1))
(substring str2 1 (string-length str2)))))))
Où string-contains
retours vrai si une chaîne a un certain caractère en elle. À l'heure actuelle, il semble que cela fonctionne, mais je pense qu'il pourrait y avoir un bug.
Est-ce la sous-séquence commune la plus longue, ou est-ce la plus longue sous-chaîne commune? La distinction est de savoir si la séquence doit être contiguë ou non. – mquander
Sa plus longue sous-séquence, donc la chaîne n'a pas besoin d'être contiguë. –
Ne supprimez pas votre question. "Correction du problème" est complètement inutile pour quelqu'un d'autre qui lit cette page maintenant. – erjiang