Tre modi per invertire una stringa in JavaScript

Questo articolo è basato sullo scripting dell'algoritmo di base di Free Code Camp "Reverse a String"

L'inversione di una stringa è una delle domande JavaScript più frequenti nel round tecnico dell'intervista. Gli intervistatori potrebbero chiederti di scrivere modi diversi per invertire una stringa, oppure potrebbero chiederti di invertire una stringa senza utilizzare metodi incorporati, oppure potrebbero persino chiederti di invertire una stringa usando la ricorsione.

Esistono potenzialmente decine di modi diversi per farlo, escludendo la funzione inversa incorporata, poiché JavaScript non ne ha una.

Di seguito sono riportati i miei tre modi più interessanti per risolvere il problema di invertire una stringa in JavaScript.

Algorithm Challenge

Invertire la stringa fornita.

Potrebbe essere necessario trasformare la stringa in un array prima di poterlo invertire.

Il tuo risultato deve essere una stringa.

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

Casi di test forniti

  • reverseString ("hello") dovrebbe diventare "olleh"
  • reverseString ("Howdy") dovrebbe diventare "ydwoH"
  • reverseString ("Greetings from Earth") dovrebbe restituire "htraE morf sgniteerG"

1. Invertire una stringa con funzioni incorporate

Per questa soluzione, utilizzeremo tre metodi: il metodo String.prototype.split (), il metodo Array.prototype.reverse () e il metodo Array.prototype.join ().

  • Il metodo split () divide un oggetto String in un array di stringhe separando la stringa in sottostringhe.
  • Il metodo reverse () inverte un array in posizione. Il primo elemento dell'array diventa l'ultimo e l'ultimo diventa il primo.
  • Il metodo join () unisce tutti gli elementi di un array in una stringa.
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");

Concatenare i tre metodi insieme:

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

2. Invertire una stringa con un ciclo For decrescente

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');

Senza commenti:

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

3. Invertire una stringa con ricorsione

Per questa soluzione, utilizzeremo due metodi: il metodo String.prototype.substr () e il metodo String.prototype.charAt ().

  • Il metodo substr () restituisce i caratteri in una stringa che inizia dalla posizione specificata fino al numero di caratteri specificato.
"hello".substr(1); // "ello"
  • Il metodo charAt () restituisce il carattere specificato da una stringa.
"hello".charAt(0); // "h"

La profondità della ricorsione è uguale alla lunghezza della stringa. Questa soluzione non è la migliore e sarà molto lenta se la stringa è molto lunga e la dimensione dello stack è la principale preoccupazione.

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");

Senza commenti:

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

Operatore condizionale (ternario):

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

L'inversione di una stringa in JavaScript è un piccolo e semplice algoritmo che può essere richiesto durante uno screening tecnico telefonico o un colloquio tecnico. Potresti prendere la strada più breve per risolvere questo problema, o adottare l'approccio risolvendolo con la ricorsione o soluzioni anche più complesse.

Spero tu l'abbia trovato utile. Questo fa parte della mia serie di articoli "Come risolvere gli algoritmi FCC" sulle sfide dell'algoritmo di Free Code Camp, in cui propongo diverse soluzioni e spiego passo dopo passo cosa succede sotto il cofano.

Tre modi per ripetere una stringa in JavaScript

In questo articolo, spiegherò come risolvere la sfida "Ripeti una stringa, ripeti una stringa" di freeCodeCamp. Questo implica…

Due modi per confermare la fine di una stringa in JavaScript

In questo articolo, spiegherò come risolvere la sfida "Conferma la fine" di freeCodeCamp.

Tre modi per fattorializzare un numero in JavaScript

Questo articolo è basato sullo scripting dell'algoritmo di base di Free Code Camp "Fattorizza un numero"

Due modi per verificare la presenza di palindromi in JavaScript

Questo articolo è basato sullo scripting dell'algoritmo di base di Free Code Camp "Check for Palindromes".

Tre modi per trovare la parola più lunga in una stringa in JavaScript

Questo articolo è basato sullo scripting dell'algoritmo di base di Free Code Camp "Trova la parola più lunga in una stringa".

Tre modi per intitolare una frase in JavaScript

Questo articolo è basato sullo scripting dell'algoritmo di base di Free Code Camp "Title Case a Sentence".

Se hai la tua soluzione o qualche suggerimento, condividili di seguito nei commenti.

Oppure puoi seguirmi su Medium , Twitter, Github e LinkedIn , subito dopo aver fatto clic sul cuore verde in basso ;-)

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

Resources

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