Três maneiras de reverter uma string em JavaScript

Este artigo é baseado no Free Code Camp Basic Algorithm Scripting “Reverse a String”

Inverter uma string é uma das perguntas mais frequentes sobre o JavaScript na rodada técnica da entrevista. Os entrevistadores podem pedir a você para escrever maneiras diferentes de reverter uma string, ou podem pedir que você inverta uma string sem usar métodos embutidos, ou podem até mesmo pedir que você inverta uma string usando recursão.

Existem potencialmente dezenas de maneiras diferentes de fazer isso, excluindo a função reversa integrada, já que o JavaScript não tem uma.

Abaixo estão minhas três maneiras mais interessantes de resolver o problema de reverter uma string em JavaScript.

Desafio de Algoritmo

Inverta a string fornecida.

Você pode precisar transformar a string em uma matriz antes de poder invertê-la.

Seu resultado deve ser uma string.

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

Casos de teste fornecidos

  • reverseString (“hello”) deve se tornar “olleh”
  • reverseString (“Howdy”) deve se tornar “ydwoH”
  • reverseString ("Saudações da Terra") deve retornar "htraE morf sgniteerG"

1. Inverta uma string com funções integradas

Para esta solução, usaremos três métodos: o método String.prototype.split (), o método Array.prototype.reverse () e o método Array.prototype.join ().

  • O método split () divide um objeto String em uma matriz de string, separando a string em sub strings.
  • O método reverse () inverte uma matriz no lugar. O primeiro elemento da matriz se torna o último e o último se torna o primeiro.
  • O método join () une todos os elementos de uma matriz em uma string.
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");

Encadeando os três métodos juntos:

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

2. Inverta uma corda com um laço for de decremento

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

Sem comentários:

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

3. Reverter uma string com recursão

Para esta solução, usaremos dois métodos: o método String.prototype.substr () e o método String.prototype.charAt ().

  • O método substr () retorna os caracteres em uma string começando no local especificado até o número especificado de caracteres.
"hello".substr(1); // "ello"
  • O método charAt () retorna o caractere especificado de uma string.
"hello".charAt(0); // "h"

A profundidade da recursão é igual ao comprimento da String. Esta solução não é a melhor e será muito lenta se a String for muito longa e o tamanho da pilha for uma grande preocupação.

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

Sem comentários:

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

Operador condicional (ternário):

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

Reverter uma string em JavaScript é um algoritmo pequeno e simples que pode ser solicitado em uma triagem técnica por telefone ou em uma entrevista técnica. Você pode seguir o caminho mais curto para resolver esse problema ou adotar a abordagem resolvendo-o com recursão ou soluções ainda mais complexas.

Eu espero que tenha achado isto útil. Isso faz parte da minha série de artigos “Como resolver algoritmos do FCC” sobre os Desafios de algoritmos do Free Code Camp, onde proponho várias soluções e explico passo a passo o que acontece nos bastidores.

Três maneiras de repetir uma string em JavaScript

Neste artigo, explicarei como resolver o desafio “Repita uma string repita uma string” do freeCodeCamp. Isso involve…

Duas maneiras de confirmar o final de uma string em JavaScript

Neste artigo, explicarei como resolver o desafio “Confirmar o final” do freeCodeCamp.

Três maneiras de fatorar um número em JavaScript

Este artigo é baseado no Free Code Camp Basic Algorithm Scripting “Factorialize a Number”

Duas maneiras de verificar se há palíndromos em JavaScript

Este artigo é baseado no Free Code Camp Basic Algorithm Scripting “Check for Palindromes”.

Três maneiras de encontrar a palavra mais longa em uma string em JavaScript

Este artigo é baseado no Free Code Camp Basic Algorithm Scripting “Find the Longest Word in a String”.

Três maneiras de capitular uma frase em JavaScript

Este artigo é baseado no Free Code Camp Basic Algorithm Scripting “Caixa de título uma frase”.

Se você tem sua própria solução ou sugestões, compartilhe-as abaixo nos comentários.

Ou você pode me seguir no Medium , Twitter, Github e LinkedIn , logo após clicar no coração verde abaixo ;-)

# StayCurious, # KeepOnHacking & # MakeItHappen!

Recursos

  • método split () - MDN
  • método reverse () - MDN
  • método join () - MDN
  • String.length - MDN
  • método substr () - MDN
  • Método charAt () - MDN