par exemple "ccddcc" dans la chaîne "abaccddccefe"
J'ai pensé à une solution mais elle fonctionne en temps O (n ^ 2)
Algo 1:
Étapes: c'est une méthode de force brute
- Avoir 2 boucles
for pour i = 1 à i inférieur à array.length -1
pour j = i + 1 à j inférieur à array.length - De cette façon, vous pouvez obtenir une sous-chaîne de toutes les combinaisons possibles à partir du tableau
- Avoir une fonction palindrome qui vérifie si une corde est palindrome
- donc pour chaque sous-chaîne (i, j) appelez cette fonction, s'il s'agit d'un palindrome, stockez-la dans une variable chaîne
- Si vous trouvez la sous-chaîne palindrome suivante et si elle est supérieure à la sous-chaîne actuelle, remplacez-la par la sous-chaîne actuelle.
- Enfin votre variable chaîne aura la réponse
Problèmes: 1. Cet algorithme s'exécute en temps O (n ^ 2).
Algo 2:
- Inversez la chaîne et stockez-la dans un tableau différent
- Recherchez maintenant la plus grande sous-chaîne correspondante entre le tableau
- Mais cela fonctionne aussi en temps O (n ^ 2)
Pouvez-vous penser à un algo qui fonctionne dans un meilleur temps. Si possible O (n) fois
O(n^2)
d'obtenir les sous-chaînes *O(n)
pour vérifier si ce sont des palindromes, pour un total deO(n^3)
?