Convertit une chaîne de palindrome chaîne avec un minimum d'insertions
Afin de trouver le nombre minimal d'insertions nécessaires pour convertir une chaîne donnée(s) à palindrome je trouve la plus longue sous-suite commune de la chaîne(lcs_string) et son inverse. Par conséquent, le nombre d'insertions est de longueur(s) - longueur(lcs_string)
Quelle méthode doit être employée pour trouver l'équivalent palindrome de la chaîne sur le fait de savoir le nombre d'insertions?
Par exemple :
1) azbzczdzez
Nombre d'insertions requis : 5
Palindrome chaîne : azbzcezdzeczbza
Bien que plusieurs palindrome chaînes peuvent exister pour la même chaîne, mais je veux trouver un seul palindrome?
OriginalL'auteur whitepearl | 2012-05-23
Vous devez vous connecter pour publier un commentaire.
Laisser
S[i, j]
représente une sous-chaîne de la chaîne deS
à partir de l'indice dei
et se terminant à l'indice dej
(tous deux inclus) etc[i, j]
être la solution optimale pourS[i, j]
.Évidemment,
c[i, j] = 0 if i >= j
.En général, nous avons la récurrence:
OriginalL'auteur Ravi Gupta
D'élaborer sur VenomFangs réponse, il y a une dynamique simple solution de programmation de celui-ci. Notez que je suis en supposant que la seule opération autorisée ici est l'insertion de caractères (pas de suppression, mises à jour). Soit S une chaîne de n caractères. Le simple récursivité de la fonction P est la suivante:
P[i..j]
Si vous souhaitez plus d'explication sur pourquoi cela est vrai, poster un commentaire et je me ferais un plaisir de vous l'expliquer (bien que son très facile à voir avec un peu de réflexion). Ceci, en passant, est l'exact opposé de la CL de la fonction que vous utilisez, donc de valider que votre solution est en fait optimale. Bien sûr, sa filiale possible que j'ai raté, si oui, quelqu'un faites moi savoir!
Edit: pour prendre en compte le palindrome lui-même, cela peut être facilement fait comme suit:
Comme indiqué ci-dessus, P[1..n] serait vous donner le nombre d'insertions nécessaires pour faire de cette chaîne un palindrome. Une fois le au-dessus de tableau à deux dimensions est construit, voici comment vous trouvez le palindrome:
Démarrer avec i=1, j=n. Maintenant,
sortie de chaîne = "";
N'a que faire de mieux lire?
Édité maintenant, est-ce qu'aider?
OriginalL'auteur kyun
La solution semble être d'une programmation dynamique de la solution.
Vous pouvez être en mesure de trouver votre réponse dans le post suivant: Comment puis-je calculer le nombre de caractères nécessaires pour transformer une chaîne en un palindrome?
OriginalL'auteur James Oravec
PHP Solution de O(n)
OriginalL'auteur Vishnu Agarwal
Simple. Voir ci-dessous 🙂
OriginalL'auteur Rohan Arora