J'ai actuellement un code qui compte les palindromes dans une chaîne donnée et cela fonctionnait bien jusqu'à ce que je le teste avec "appal" la fonction retournait 0 quand elle devrait renvoyer 2 (appa et pp) J'apprécierais vraiment que quelqu'un puisse éditer mon code actuel pour qu'il réponde à cette exigence, merci! Voici mon code:
function countPalindromes(string, count) { if (string.length <= 1) { return count; } let [ firstLetter ] = string; let lastLetter = string[string.length - 1]; if (firstLetter === lastLetter) { let stringWithoutFirstAndLastLetters = string.substring(1, string.length - 1); return countPalindromes(stringWithoutFirstAndLastLetters, count + 1); } else { return 0; } } console.log(countPalindromes("kayak", 0)); console.log(countPalindromes("aya", 0)); console.log(countPalindromes("appal", 0));
3 Réponses :
function isPalindrome(str) { return str == str.split("").reverse().join(""); } //iterative only solution function countPalindromes(s) { let count = 0; for (let i = 0; i < s.length - 1; i++) { const sub = s.slice(i); for (let j = 2; j < sub.length + 1; j++) { if (isPalindrome(sub.slice(0, j))) { count++ } } } return count; } console.log(countPalindromes("kayak")); console.log(countPalindromes("aya")); console.log(countPalindromes("appal"));
Vous comparez la première lettre avec la dernière lettre et vous renverrez zéro car ce sera faux pour appal mais vrai pour les 2 autres cas de test.
pourriez-vous m'aider à résoudre ce problème s'il vous plaît? @candaceahrends
Voici une question similaire: stackoverflow.com/questions/64596115/...
cette question parle de l'implémentation d'une fonction itérative et elle a le même problème où appal renvoie 0 au lieu de 2 @candaceahrends
mes affectations me demandent de "Étant donné une chaîne, calculer le nombre de palindromes qui existent dans cette chaîne (lettres simples exclues), tout en utilisant la récursivité" @CanadaceAhrends
s'il vous plaît aidez-moi, je l'apprécierais vraiment
Je pense que cette fonction fait l'affaire. Heureux de refactoriser et de l'expliquer plus tard. Je préfère écrire une nouvelle fonction car je ne pense pas que votre code soit proche de l'exécution de la tâche.
function returnNumberOfPalindromes(word) { function isPalindrome(chunk) { return [...chunk].reverse().join('') === chunk; } let tally = 0; for (let index1 = 0; index1 <= word.length; index1++) { for (index2 = index1 + 2; index2 <= word.length; index2++) { let chunk = word.slice(index1, index2); if (isPalindrome(chunk)) { tally += 1; }; } } console.log(tally); } returnNumberOfPalindromes("kayak"); returnNumberOfPalindromes("aya"); returnNumberOfPalindromes("appal"); returnNumberOfPalindromes("addadaadd");
avez-vous une idée de la façon dont je peux coder la même chose à partir d'une approche itérative? @ tonitone120
@ 28spaceaddict Je comprends que le mot itératif signifie «répéter» - par exemple, une for loop
. (Par cette définition, je dirais que ma réponse est une approche itérative). Pouvez-vous donner un exemple de ce que vous entendez par approche itérative? Je dois y aller maintenant mais je reviendrai plus tard
oui, c'est une approche itérative, j'ai donc besoin du même code avec une approche itérative et aussi en utilisant la récursivité @ tonitone120
pensez-vous que vous serez de retour dans 20 minutes parce que je dois le soumettre dans 40 minutes?
Donc, fondamentalement, si vous trouvez un palindrome comme pp
ou apa
en scannant la chaîne et en comparant le current
avec le current+1
et le current+2
dans une boucle itérative et en stockant les correspondances sous forme d'objets avec un index de fin de début.
Vous lancez un décompte qui correspond à la longueur du tableau.
Mettez à jour le tableau en filtrant les éléments où vous mettez à jour l'objet avec un de moins et un de plus pour début fin si le 1 plus grand est un palindrome et retournez vrai ou retournez faux et faites-le supprimer.
si le tableau est de longueur zéro, vous renvoyez le compte
ajoutez la longueur du tableau au nombre et répétez à partir de 3.
pouvez-vous me montrer comment faire cela s'il vous plaît @sylwester
@ 28spaceaddict Puisque ce sont certainement des devoirs, je ne le ferai pas. Vous devez écrire votre propre code. Ma réponse décrit simplement comment je l'aurais fait. Si vous lisez ceci et le faites manuellement sur papier, voyez-vous des faiblesses?
Je pense que votre problème est que vous ne vérifieriez jamais si
appal
etppa
sont des palindromes. Vous devrez trouver un moyen de vérifier la chaîne sans SEULEMENT la première lettre et la chaîne sans SEULEMENT la dernière lettre.@ M-Chen-3 pensez-vous que vous pourriez m'aider avec ça?
xyzappa
devrait-xyzappa
également renvoyer 2 parce queappa
etpp
sont des palindromes? Comment cela est-il censé fonctionner exactement?oui qui devrait renvoyer 2 aussi, mes affectations me demandent de "Étant donné une chaîne, calculer le nombre de palindromes qui existent dans cette chaîne (lettres uniques exclues), tout en utilisant la récursivité" @Sylwester
@Sylwester J'apprécierais vraiment votre aide !!
Si vous cliquez sur la balise palindrome en bas de votre question, vous verrez qu'il y a 1426 questions déjà posées sur les palindromes sur Stack Overflow. Aucun de ceux-ci n'a répondu à votre question?