Trois façons d'inverser une chaîne en JavaScript

Cet article est basé sur le script d'algorithme de base de Free Code Camp "Inverser une chaîne"

L'inversion d'une chaîne est l'une des questions JavaScript les plus fréquemment posées lors de la phase technique de l'entretien. Les enquêteurs peuvent vous demander d'écrire différentes manières d'inverser une chaîne, ou ils peuvent vous demander d'inverser une chaîne sans utiliser de méthodes intégrées, ou ils peuvent même vous demander d'inverser une chaîne en utilisant la récursivité.

Il existe potentiellement des dizaines de façons différentes de le faire, à l'exclusion de la fonction inverse intégrée, car JavaScript n'en a pas.

Voici mes trois façons les plus intéressantes de résoudre le problème de l'inversion d'une chaîne en JavaScript.

Défi algorithme

Inversez la chaîne fournie.

Vous devrez peut-être transformer la chaîne en tableau avant de pouvoir l'inverser.

Votre résultat doit être une chaîne.

function reverseString(str) { return str; } reverseString("hello");

Cas de test fournis

  • reverseString ("bonjour") doit devenir "olleh"
  • reverseString ("Howdy") doit devenir "ydwoH"
  • reverseString ("Salutations de la Terre") doit renvoyer "htraE morf sgniteerG"

1. Inverser une chaîne avec des fonctions intégrées

Pour cette solution, nous utiliserons trois méthodes: la méthode String.prototype.split (), la méthode Array.prototype.reverse () et la méthode Array.prototype.join ().

  • La méthode split () divise un objet String en un tableau de chaînes en séparant la chaîne en sous-chaînes.
  • La méthode reverse () inverse un tableau en place. Le premier élément du tableau devient le dernier et le dernier devient le premier.
  • La méthode join () joint tous les éléments d'un tableau dans une chaîne.
function reverseString(str) { // Step 1. Use the split() method to return a new array var splitString = str.split(""); // var splitString = "hello".split(""); // ["h", "e", "l", "l", "o"] // Step 2. Use the reverse() method to reverse the new created array var reverseArray = splitString.reverse(); // var reverseArray = ["h", "e", "l", "l", "o"].reverse(); // ["o", "l", "l", "e", "h"] // Step 3. Use the join() method to join all elements of the array into a string var joinArray = reverseArray.join(""); // var joinArray = ["o", "l", "l", "e", "h"].join(""); // "olleh" //Step 4. Return the reversed string return joinArray; // "olleh" } reverseString("hello");

Enchaîner les trois méthodes ensemble:

function reverseString(str) { return str.split("").reverse().join(""); } reverseString("hello");

2. Inverser une chaîne avec une boucle For décrémentante

function reverseString(str) { // Step 1. Create an empty string that will host the new created string var newString = ""; // Step 2. Create the FOR loop /* The starting point of the loop will be (str.length - 1) which corresponds to the last character of the string, "o" As long as i is greater than or equals 0, the loop will go on We decrement i after each iteration */ for (var i = str.length - 1; i >= 0; i--) { newString += str[i]; // or newString = newString + str[i]; } /* Here hello's length equals 5 For each iteration: i = str.length - 1 and newString = newString + str[i] First iteration: i = 5 - 1 = 4, newString = "" + "o" = "o" Second iteration: i = 4 - 1 = 3, newString = "o" + "l" = "ol" Third iteration: i = 3 - 1 = 2, newString = "ol" + "l" = "oll" Fourth iteration: i = 2 - 1 = 1, newString = "oll" + "e" = "olle" Fifth iteration: i = 1 - 1 = 0, newString = "olle" + "h" = "olleh" End of the FOR Loop*/ // Step 3. Return the reversed string return newString; // "olleh" } reverseString('hello');

Sans commentaire:

function reverseString(str) { var newString = ""; for (var i = str.length - 1; i >= 0; i--) { newString += str[i]; } return newString; } reverseString('hello');

3. Inverser une chaîne avec récursivité

Pour cette solution, nous utiliserons deux méthodes: la méthode String.prototype.substr () et la méthode String.prototype.charAt ().

  • La méthode substr () renvoie les caractères d'une chaîne commençant à l'emplacement spécifié jusqu'au nombre de caractères spécifié.
"hello".substr(1); // "ello"
  • La méthode charAt () renvoie le caractère spécifié à partir d'une chaîne.
"hello".charAt(0); // "h"

La profondeur de la récursivité est égale à la longueur de la chaîne. Cette solution n'est pas la meilleure et sera vraiment lente si la chaîne est très longue et que la taille de la pile est une préoccupation majeure.

function reverseString(str) { if (str === "") // This is the terminal case that will end the recursion return ""; else return reverseString(str.substr(1)) + str.charAt(0); /* First Part of the recursion method You need to remember that you won’t have just one call, you’ll have several nested calls Each call: str === "?" reverseString(str.subst(1)) + str.charAt(0) 1st call – reverseString("Hello") will return reverseString("ello") + "h" 2nd call – reverseString("ello") will return reverseString("llo") + "e" 3rd call – reverseString("llo") will return reverseString("lo") + "l" 4th call – reverseString("lo") will return reverseString("o") + "l" 5th call – reverseString("o") will return reverseString("") + "o" Second part of the recursion method The method hits the if condition and the most highly nested call returns immediately 5th call will return reverseString("") + "o" = "o" 4th call will return reverseString("o") + "l" = "o" + "l" 3rd call will return reverseString("lo") + "l" = "o" + "l" + "l" 2nd call will return reverserString("llo") + "e" = "o" + "l" + "l" + "e" 1st call will return reverserString("ello") + "h" = "o" + "l" + "l" + "e" + "h" */ } reverseString("hello");

Sans commentaire:

function reverseString(str) { if (str === "") return ""; else return reverseString(str.substr(1)) + str.charAt(0); } reverseString("hello");

Opérateur conditionnel (ternaire):

function reverseString(str) { return (str === '') ? '' : reverseString(str.substr(1)) + str.charAt(0); } reverseString("hello");

Inverser une chaîne en JavaScript est un algorithme petit et simple qui peut être demandé lors d'un dépistage technique par téléphone ou d'un entretien technique. Vous pouvez prendre la voie la plus courte pour résoudre ce problème, ou adopter l'approche en le résolvant avec la récursivité ou des solutions encore plus complexes.

J'espère que vous avez trouvé cela utile. Cela fait partie de ma série d'articles «Comment résoudre les algorithmes FCC» sur les défis de l'algorithme Free Code Camp, où je propose plusieurs solutions et explique étape par étape ce qui se passe sous le capot.

Trois façons de répéter une chaîne en JavaScript

Dans cet article, je vais vous expliquer comment résoudre le défi «Répéter une chaîne répéter une chaîne» de freeCodeCamp. Cela implique…

Deux façons de confirmer la fin d'une chaîne en JavaScript

Dans cet article, je vais vous expliquer comment résoudre le défi «Confirmer la fin» de freeCodeCamp.

Trois façons de factoriser un nombre en JavaScript

Cet article est basé sur le script d'algorithme de base de Free Code Camp "Factorialiser un nombre"

Deux façons de vérifier les palindromes en JavaScript

Cet article est basé sur le scripting d'algorithme de base de Free Code Camp «Check for Palindromes».

Trois façons de trouver le mot le plus long dans une chaîne en JavaScript

Cet article est basé sur le scripting d'algorithme de base de Free Code Camp «Trouver le mot le plus long d'une chaîne».

Trois façons de titrer une phrase en JavaScript

Cet article est basé sur le scripting d'algorithme de base de Free Code Camp «Title Case a Sentence».

Si vous avez votre propre solution ou des suggestions, partagez-les ci-dessous dans les commentaires.

Ou vous pouvez me suivre sur Medium , Twitter, Github et LinkedIn , juste après avoir cliqué sur le cœur vert ci-dessous ;-)

‪#‎StayCurious‬, ‪#‎KeepOnHacking‬ & ‪#‎MakeItHappen‬!

Resources

  • split() method — MDN
  • reverse() method — MDN
  • join() method — MDN
  • String.length — MDN
  • substr() method — MDN
  • charAt() method — MDN