Сегодня я практиковал вопрос о Freecodecamp, и я столкнулся с вопросом о инверсии струнных. Реверс строка - один из общих вопросов на собеседовании в JavaScript. Может быть, интервьюер даст вам строку «Привет слову!», Которая позволит вам превратить ее в »! Дроу Оллех» через JavaScript.
Я также новичок. Я прошел тест, используя знания, связанные с массивами, которые я узнал ранее, и советы по вопросам. Позже я подумал, есть ли другой способ решить эту проблему? После поиска все еще много методов. Вот некоторые из этих методов для последующего использования.
Что делать
Вещи, которые мы хотим сделать:
Перед отображением предоставленной строки в обратном направлении перед обратной строкой необходимо преобразовать строку в массив, а конечный результат все еще остается строкой.
Далее, давайте посмотрим, какие методы могут достичь вышеуказанных требований.
Используя встроенные функции
В упражнениях нам предложено, чтобы мы могли использовать три метода для успешного отображения строки в обратном порядке:
String.prototype.split () array.prototype.reverse () array.prototype.join ()
Просто пройдите через это кратко:
Split () Метод распределяет каждый символ строкового объекта и обрабатывает каждую строку как каждый элемент массива, метод REverses () для изменения массива, распоряжает элементы в массиве в обратном порядке, первый массив становится последним, а последний становится первым методом соединения () соединяет все элементы в массиве в строку
Давайте посмотрим на пример:
Функция reversestring (str) {// Первый шаг - использовать метод split () для возврата нового массива // var splitstring = "hello" .split (""); var splitstring = str.split ("" "); // разделить строку // возвращать новый массив ["h", "e", "l", "l", "l", "o"] // Второй шаг - использовать метод обратного () для создания нового массива // var reversearray = ["h", "e", "l", "l", "o"]. Reverse (); var reversearray = splitstring.reverse (); // Оригинальные элементы массива перевернуты в последовательности ["O", "L", "L", "E", "H"] // Третий шаг - использовать метод join () для соединения каждого элемента массива и объединить его в новую строку // var joinarray = ["o", "l", "l", "e", "h"]. var joinArray = reversearray.join ("" "); // "olleh" // Четвертый шаг - вернуть новую строку, которая перевернута. вернуть JoinArray; // "olleh"} reversestring ("hello"); // => ollehУпростите приведенный выше метод и можно записать так:
Функция reversestring (str) {return str.split (""). React (). join ("");} reversestring ("hello"); // => ollehИнвертировать строку, используя обход по уменьшению петли
Этот метод использует for цикла для выполнения уменьшенного обхода к исходной строке, а затем переосмыслить обходную строку в новую строку:
Function reversestring (str) {// Шаг 1: Создайте пустую строку для хранения недавно созданной строки var newstring = ""; // Шаг 2: Используйте цикл // петля, запуская запуска, уменьшает обход от str.length-1, пока я не будет больше или равна 0, цикл продолжится // str.length-1 соответствует последнему символу строки o для (var i = str.length-1; i> = 0; i--) {newstring += str [i]; // или Newstring = Newstring + Str [i]; } // Шаг 3: вернуть обратную строку return newstring; } reverseString ('Hello'); // => // "olleh"Простой взгляд на процесс прохождения строки. Предположим, вам нужно инвертировать строку «Привет». Весь процесс обхода показан в следующей таблице:
i Фактически, for цикла для приведенного выше также можно заменить цикл while :
Функция reversestring (str) {var newstring = ''; var i = str.length; while (i> 0) {newstring += str.substring (i - 1, i); я--; } return Newstring;} ReversEringing ("Hello"); // => olleh Метод substring() в цикле while . substring() возвращает подстроение между двумя индексами строки (или до конца строки).
Реализовать инверсию строки с использованием рекурсии
Строка также может быть изменена с использованием методов String.prototype.substr() и String.prototype.charAt() .
Метод substr() возвращает подстроение в строке, начиная с указанной позиции в указанную длину. например:
var str = "abcdefghij"; console.log ("(1,2):" + str.substr (1,2)); // (1,2): bcdefghijconsole.log ("(-3,2):" + str.substr (-3,2)); // (-3,2): hiconsole.log ("(-3):" + str.substr (-3)); // (-3): hijconsole.log ("(1):" + str.substr (1)); // (1): bcdefghijconsole.log ("(-20, 2):" + str.substr (-20, 2)); // (-20, 2): abconsole.log ("(20, 2):" + str.substr (20, 2)); // (20, 2): Метод charAt() возвращает символ в указанной позиции в строке. Символы в строке индексируются слева направо, первый символ имеет значение индекса 0 , а последний символ (при условии, что символ находится в String stringName ) имеет значение индекса stringName.length - 1 . Если указанное значение index находится за пределами этого диапазона, возвращается пустая строка.
var AnyString = "Храбрый новый мир"; console.log ("символ в индексе 0 -" + anystring.charat (0) + "'"); // => символ в индексе 0 равен 'b'console.log ("символ в индексе 1:" + anystring.charat (1) + "'"); // => символ в индексе 1 равен 'r'console.log ("символ в индексе 2 -" + anystring.charat (2) + "'"); // => символ в индексе 2 - «a'console.log (« символ в индексе 3 - « + anystring.charat (3) +» '' "); // => символ в индексе 3 - 'v'Console.log («символ в индексе 4 -« + anystring.charat (4) + »' '"); // => символ в индексе 4 равен 'e'console.log ("символ в индексе 999 -" + anystring.charat (999) + "'"); // => символ в индексе 999 - это ''В совокупности мы можем сделать это для реализации инверсии строки:
функция reversestring (str) {if (str === "") {return ""; } else {return reversestring (str.substr (1)) + str.charat (0); }} reversestring ("hello"); // => ollehПервая часть рекурсивного метода. Вы должны помнить, что вы не будете просто позвонить это один раз, у вас будет несколько вложенных звонков.
Часть 2 рекурсивный метод.
Приведенный выше метод может быть дополнительно улучшен и изменен на тройной оператор
Функция reversestring (str) {return (str === '')? '': reversestring (str.substr (1)) + str.charat (0);} reversestring ("hello"); // => ollehЭто также можно изменить на этот метод
Функция reversestring (str) {return str && reversestring (str.substr (1)) + str [0];} reversestring ("hello"); // => ollehДругие методы
В дополнение к приведенным выше методам, на самом деле есть некоторые другие методы:
Метод 1 Код копирования код следующим образом: function reverseString (str) { var newString = []; for (var i = str.length - 1, j = 0; i >= 0; i--, j++) { newString[j] = str[i]; } return newString.join('');}reverseString("hello"); // => olleh 2 метода 2: function reverseString (str) { for (var i = str.length - 1, newString = ''; i >= 0; newString += str[i--] ) { } return newString;}reverseString("hello"); // => olleh выглядит следующим образом: function reverseString (str) { function rev(str, len, newString) { return (len === 0) ? newString : rev(str, --len, (newString += str[len])); } return rev(str, str.length, '');}reverseString("hello"); // =>olleh выглядит следующим образом: function reverseString (str) { str = str.split(''); var len = str.length, halfIndex = Math.floor(len / 2) - 1, newString; for (var i = 0; i <= halfIndex; i++) { newString = str[len - i - 1]; str[len - i - 1] = str[i]; str[i] = newString; } return str.join('');}reverseString("hello"); // => olleh Пятый код копирования код следующего: function reverseString (str) { if (str.length < 2) { return str; } var halfIndex = Math.ceil(str.length / 2); return reverseString(str.substr(halfIndex)) + reverseString(str.substr(0, halfIndex));}reverseString("hello"); // =>olleh выглядит следующим образом: function reverseString(str) { return [].reduceRight.call(str, function(prev, curr) { return prev + curr; }, '');}reverseString("hello"); // =>olleh ES6
В ES6 это может быть сделано проще, например:
[...str].reverse().join('');
или [...str].reduceRight( (prev, curr) => prev + curr );
или:
const reverse = str => str && reverse(str.substr(1)) + str[0];
Инверсия строки - это небольшой и простой алгоритм, как упоминалось ранее, и часто используется для собеседования с основным JavaScript. Вы можете использовать приведенные выше методы для решения этой проблемы или даже использовать более сложные решения. Если у вас есть лучший способ, добавьте его в комментарии ниже и поделитесь им с нами.