Три способа перевернуть строку в JavaScript

Эта статья основана на сценариях базового алгоритма Free Code Camp «Обратить строку».

Обращение строки - один из наиболее часто задаваемых вопросов JavaScript в техническом раунде собеседования. Интервьюеры могут попросить вас написать различные способы перевернуть строку, или они могут попросить вас перевернуть строку без использования встроенных методов, или они могут даже попросить вас перевернуть строку с помощью рекурсии.

Потенциально существуют десятки различных способов сделать это, за исключением встроенной функции реверса , поскольку в JavaScript ее нет.

Ниже приведены три моих самых интересных способа решения проблемы обращения строки в JavaScript.

Алгоритм Challenge

Поменяйте местами указанную строку.

Возможно, вам придется преобразовать строку в массив, прежде чем вы сможете ее перевернуть.

Ваш результат должен быть строкой.

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

Предоставляемые тестовые примеры

  • reverseString («привет») должен стать «оллех»
  • reverseString («Привет») должен стать «ydwoH»
  • reverseString («Привет с Земли») должен вернуть «htraE morf sgniteerG».

1. Обращение строки с помощью встроенных функций

Для этого решения мы будем использовать три метода: метод String.prototype.split (), метод Array.prototype.reverse () и метод Array.prototype.join ().

  • Метод split () разбивает объект String на массив строк, разделяя строку на подстроки.
  • Метод reverse () переворачивает массив на месте. Первый элемент массива становится последним, а последний - первым.
  • Метод join () объединяет все элементы массива в строку.
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");

Объединение трех методов вместе:

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

2. Переверните строку с помощью убывающего цикла For

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

Без комментариев:

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

3. Обратить строку с помощью рекурсии

Для этого решения мы будем использовать два метода: метод String.prototype.substr () и метод String.prototype.charAt ().

  • Метод substr () возвращает символы в строке, начиная с указанного места и заканчивая указанным количеством символов.
"hello".substr(1); // "ello"
  • Метод charAt () возвращает указанный символ из строки.
"hello".charAt(0); // "h"

Глубина рекурсии равна длине String. Это решение не лучшее и будет очень медленным, если строка очень длинная, а размер стека имеет большое значение.

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

Без комментариев:

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

Условный (тернарный) оператор:

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

Обращение строки в JavaScript - это небольшой и простой алгоритм, который можно задать на техническом просмотре телефона или на техническом собеседовании. Вы можете выбрать короткий путь для решения этой проблемы или выбрать подход, решив ее с помощью рекурсии или даже более сложных решений.

Надеюсь, вы нашли это полезным. Это часть моей серии статей «Как решать алгоритмы FCC», посвященных проблемам алгоритмов Free Code Camp, где я предлагаю несколько решений и шаг за шагом объясняю, что происходит внутри.

Три способа повторить строку в JavaScript

В этой статье я объясню, как решить задачу freeCodeCamp «Повторить строку, повторить строку». Это включает в себя…

Два способа подтвердить окончание строки в JavaScript

В этой статье я объясню, как решить задачу freeCodeCamp «Подтвердить окончание».

Три способа факторизации числа в JavaScript

Эта статья основана на сценариях базового алгоритма Free Code Camp «Факторизация числа».

Два способа проверки палиндромов в JavaScript

Эта статья основана на сценариях базового алгоритма Free Code Camp «Проверка палиндромов».

Три способа найти самое длинное слово в строке в JavaScript

Эта статья основана на сценариях базового алгоритма Free Code Camp «Найдите самое длинное слово в строке».

Три способа указать заглавие предложения в JavaScript

Эта статья основана на сценариях базового алгоритма Free Code Camp «Заглавный регистр - предложение».

Если у вас есть собственное решение или какие-либо предложения, поделитесь ими ниже в комментариях.

Или вы можете подписаться на меня в Medium , Twitter, Github и LinkedIn сразу после того, как нажмете зеленое сердце ниже ;-)

# StayCurious, # KeepOnHacking и # MakeItHappen!

Ресурсы

  • Метод split () - MDN
  • метод reverse () - MDN
  • метод join () - MDN
  • String.length - MDN
  • substr () метод - MDN
  • charAt () метод - MDN