Переворачивание струны кажется достаточно простым, правда? Просто расставьте буквы в обратном порядке! Но если мыслить алгоритмически, мы должны быть точными. Мы должны разбить каждый шаг разворота и подумать о потенциальных проблемах с процессом.

Начнем с первой буквы? Начнем с последней буквы? Что делать, если буквы заглавные? Следует ли нам сохранять их исходную заглавную букву или делать первую букву каждого нового слова в строке заглавной? Как именно мы собираемся заставить код делать то, что кажется очевидным нашему мозгу?

Это хорошие вопросы, над которыми стоит задуматься, читая инструкции по алгоритму и исследуя предоставленные тестовые примеры.

Инструкции по алгоритму

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

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

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

Предоставленные тестовые случаи

  • reverseString("hello") должен возвращать строку.
  • reverseString("hello") должен стать "olleh".
  • reverseString("Howdy") должен стать "ydwoH".
  • reverseString("Greetings from Earth") должен вернуть "htraE morf sgniteerG".

Решение no 1: цикл for

ПЕДАК

Понимание проблемы: наш ввод - это строка, а наш вывод - та же строка, но в обратном порядке. Хорошие люди из freeCodeCamp дали нам подсказку в инструкциях, что нам «может потребоваться превратить строку в массив», прежде чем мы сможем ее отменить. Однако в решении №1 мы собираемся использовать цикл с уменьшением числа для итерации по каждому символу во входной строке, а не разбивать входные данные на массив. Решение № 2 будет использовать подсказку FCC.

Примеры / тестовые примеры. Предоставленные нами тестовые примеры показывают нам, что использование заглавных букв имеет значение, и мы также должны учитывать пробелы.

Структура данных. Мы собираемся сохранить ввод в виде строки. Пройдя через него с уменьшающимся циклом for, мы в конечном итоге вернем строку.

Алгоритм:

  1. Создайте новую переменную с именем reversedString и установите ее равной пустой строке. Эта переменная в конечном итоге будет возвращена в качестве нашего ответа.
  2. Создайте цикл for.
  3. В инициализации цикла for установите i равным str.length — 1. Это заставит цикл for начинаться с последней буквы во входной строке. Помните, что при переборе строк с помощью цикла for символы имеют нулевой индекс! Так, например, «привет» состоит из 5 букв, но когда оно имеет нулевой индекс, последняя буква фактически находится под номером 4 индекса. Поэтому мы устанавливаем i равным длине строки минус 1 .
  4. В условии цикла for установите i больше или равным 0. Это заставит наш цикл for работать, пока i больше или равно 0.
  5. В заключительном выражении цикла for уменьшайте i на единицу при каждом запуске цикла. Это может быть записано как i-- или i = i — 1. Это просто означает, что каждый раз при запуске цикла мы вычитаем единицу из i.
  6. В нашем цикле for добавьте каждый символ str в reversedString. Доступ к каждому символу str осуществляется с помощью обозначения скобок в текущем индексе цикла for str[i]. Идея здесь в том, что наша переменная reversedString собирает по одной букве из входной строки при каждом запуске цикла. Поскольку мы инициализировали наш цикл for последней буквой входной строки, reversedString собирает буквы в обратном порядке. (Это также можно было бы записать как reversedString = reversedString + str[i].)
  7. Вернуть reversedString как результат функции.

Код: см. ниже!

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

Решение # 2: .split (), .reverse () и .join ()

ПЕДАК

Понимание проблемы: наш ввод - это строка, а наш вывод - та же строка, но в обратном порядке. Для этого решения давайте продолжим и воспользуемся подсказкой FCC в инструкциях, чтобы разделить входную строку на массив перед тем, как перевернуть ее! На этот раз мы собираемся решить задачу создания сценариев алгоритмов с помощью встроенных методов в JavaScript!

Примеры / тестовые примеры. Предоставленные нами тестовые примеры показывают нам, что использование заглавных букв имеет значение, и мы также должны учитывать пробелы.

Структура данных. Мы вводим строку. Мы разделим эту строку на массив, каждый элемент которого будет одним символом строки. Например: 'hello' превращается в ['h', 'e', 'l', 'l', 'o']После того, как мы перевернем элементы, мы объединим их в строку для вывода.

Алгоритм:

  1. Разделите входную строку на массив букв, используя split(). Не забудьте включить в метод разделения пустую строку, например: split(''). Это гарантирует, что метод split разбивает строку по каждому отдельному символу.
  2. Переверните массив букв, используя reverse().
  3. Объедините массив перевернутых букв в строку с помощью join(). Не забудьте включить в метод соединения пустую строку, например: join(''). Это гарантирует, что метод соединения соединит буквы вместе без чего-либо между ними.

Код: см. ниже!

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

Если у вас есть другие решения и / или предложения, поделитесь в комментариях!

Эта статья является частью серии Создание скриптов алгоритмов freeCodeCamp.

Эта статья ссылается на Сценарий базового алгоритма freeCodeCamp: перевернуть строку

Вы можете подписаться на меня на Medium, LinkedIn и GitHub!