Par exemple, "ccddcc" dans la chaîne "abaccddccefe".
J'ai pensé à une solution mais elle fonctionne en temps O(n^2).
Algo 1 :
Des é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 la sous-chaîne de chaque combinaison possible à partir du tableau.
- Avoir une fonction palindrome qui vérifie si une chaîne est palindrome.
- ainsi, pour chaque sous-chaîne (i,j), appelez cette fonction, si c'est un palindrome, stockez-le dans une variable de type chaîne.
- Si vous trouvez la prochaine sous-chaîne palindrome et si elle est supérieure à la sous-chaîne actuelle, remplacez-la par la sous-chaîne actuelle.
- Enfin, votre variable chaîne de caractères contiendra la réponse
Questions : 1. Cet algorithme fonctionne en temps O(n^2).
Algo 2 :
- Inversez la chaîne de caractères et stockez-la dans un tableau différent.
- Maintenant, trouvez la plus grande sous-chaîne correspondante entre les deux tableaux.
- Mais cela aussi fonctionne en temps O(n^2)
Pouvez-vous penser à un algo qui fonctionne dans un meilleur délai ? Si possible en temps O(n)
44 votes
Je pense que le premier est
O(n^2)
pour obtenir les sous-chaînes *O(n)
pour vérifier si ce sont des palindromes, pour un total deO(n^3)
?0 votes
Et si je savais que je travaillais avec un palindrome et que j'enregistrais mes chaînes de caractères en deux moitiés et que si j'utilisais Java, j'aurais O(1) de vérification pour la fonction ?
10 votes
Le deuxième algo est correct ? Qu'en est-il de la chaîne de caractères : "abcdecba". La plus grande sous-chaîne correspondante est ("abcdecba" vs. "abcedcba") : "abc" ou "cba". Cependant, les deux ne sont pas des palindromes.
0 votes
@Learner, juste par curiosité, dans vos étapes ci-dessus, à quel tableau faites-vous référence dans vos boucles for ? Par tableau, vous faites référence à la chaîne de caractères ? string.length ?
0 votes
Voir dans une des réponses ci-dessous, le wiki : fr.wikipedia.org/wiki/Longest_palindromic_substring (la plus longue chaîne palindromique)
0 votes
@OrkunOzen c'est compliqué, et la chose principale est que aussi est de O(n^2)- boucle while dans boucle for
1 votes
Pour ceux qui cherchent une réponse avec O(n^2) - geeksforgeeks.org/longest-palindrome-substring-set-1