Tres formas de invertir una cadena en JavaScript

Este artículo se basa en la secuencia de comandos del algoritmo básico de Free Code Camp "Reverse una cadena"

Invertir una cadena es una de las preguntas de JavaScript más frecuentes en la ronda técnica de la entrevista. Los entrevistadores pueden pedirle que escriba diferentes formas de invertir una cadena, o pueden pedirle que invierta una cadena sin usar métodos incorporados, o incluso pueden pedirle que invierta una cadena usando la recursividad.

Hay potencialmente decenas de formas diferentes de hacerlo, excluyendo la función inversa incorporada, ya que JavaScript no tiene una.

A continuación se muestran mis tres formas más interesantes de resolver el problema de invertir una cadena en JavaScript.

Desafío del algoritmo

Invierta la cadena proporcionada.

Es posible que deba convertir la cadena en una matriz antes de poder invertirla.

Tu resultado debe ser una cadena.

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

Casos de prueba proporcionados

  • reverseString ("hola") debería convertirse en "olleh"
  • reverseString ("Hola") debería convertirse en "ydwoH"
  • reverseString ("Saludos desde la Tierra") debería devolver "htraE morf sgniteerG"

1. Invierta una cadena con funciones integradas

Para esta solución, usaremos tres métodos: el método String.prototype.split (), el método Array.prototype.reverse () y el método Array.prototype.join ().

  • El método split () divide un objeto String en una matriz de cadenas separando la cadena en subcadenas.
  • El método reverse () invierte una matriz en su lugar. El primer elemento de la matriz se convierte en el último y el último en el primero.
  • El método join () une todos los elementos de una matriz en una cadena.
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");

Encadenando los tres métodos juntos:

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

2. Invierta una cadena con un bucle for decreciente

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

Sin comentarios:

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

3. Invertir una cadena con recursividad

Para esta solución usaremos dos métodos: el método String.prototype.substr () y el método String.prototype.charAt ().

  • El método substr () devuelve los caracteres en una cadena que comienza en la ubicación especificada hasta el número especificado de caracteres.
"hello".substr(1); // "ello"
  • El método charAt () devuelve el carácter especificado de una cadena.
"hello".charAt(0); // "h"

La profundidad de la recursividad es igual a la longitud de la Cadena. Esta solución no es la mejor y será muy lenta si la cadena es muy larga y el tamaño de la pila es una preocupación importante.

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

Sin comentarios:

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

Operador condicional (ternario):

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

Revertir una cadena en JavaScript es un algoritmo pequeño y simple que se puede solicitar en una pantalla técnica telefónica o en una entrevista técnica. Puede tomar la ruta corta para resolver este problema, o tomar el enfoque resolviéndolo con recursividad o incluso con soluciones más complejas.

Espero que hayas encontrado esto util. Esto es parte de mi serie de artículos “Cómo resolver algoritmos FCC” sobre los desafíos de algoritmos de Free Code Camp, donde propongo varias soluciones y explico paso a paso lo que sucede bajo el capó.

Tres formas de repetir una cadena en JavaScript

En este artículo, explicaré cómo resolver el desafío "Repetir una cadena, repetir una cadena" de freeCodeCamp. Esto involucra…

Dos formas de confirmar el final de una cadena en JavaScript

En este artículo, explicaré cómo resolver el desafío "Confirmar el final" de freeCodeCamp.

Tres formas de factorializar un número en JavaScript

Este artículo se basa en la secuencia de comandos del algoritmo básico de Free Code Camp "Factorializar un número"

Dos formas de buscar palíndromos en JavaScript

Este artículo se basa en el Scripting del algoritmo básico de Free Code Camp "Comprobar palíndromos".

Tres formas de encontrar la palabra más larga de una cadena en JavaScript

Este artículo se basa en la secuencia de comandos del algoritmo básico de Free Code Camp "Encuentra la palabra más larga en una cadena".

Tres formas de poner un título a una oración en JavaScript

Este artículo está basado en el Scripting del Algoritmo Básico de Free Code Camp “Título de una oración”.

Si tiene su propia solución o alguna sugerencia, compártala a continuación en los comentarios.

O puedes seguirme en Medium , Twitter, Github y LinkedIn , justo después de hacer clic en el corazón verde a continuación ;-)

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

Resources

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