Это начало серии, которую я напишу о проблемах кодирования в Javascript и о том, как их решать (НЕКОТОРЫМИ способами).

Зачем вообще читать это?

Если вы планируете стать хорошим программистом, держу пари, что у некоторых из вас есть планы найти работу в будущем. И когда вы устраиваетесь на работу, вам нужно пройти через процесс, который включает собеседования и, возможно, проблемы с кодированием. Некоторые из них могут быть на доске в компании или на вашем компьютере дома. Компании обычно проводят такие тесты по следующим причинам:

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

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

Поэтому я решил начать серию «Проблемы алгоритмов Javascript», в которых я подниму различные проблемы и покажу, как их решать (в некоторой степени), чтобы вы лучше понимали, как писать алгоритмы, и понимать их.

Предпосылки

Я буду использовать Node.js для запуска кода Javascript, поэтому вам следует установить его, прежде чем продолжить.

Я создал Gist для этой статьи, чтобы вы могли быстро приступить к работе! Вот:

Когда у вас установлен Node.js и загружен Gist, вы готовы к работе! :-)

Задача 1 - перевернуть строку

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

function reverseString(str) {}

Первое, что мы можем сделать, это создать новую переменную, и мы собираемся установить ее в строку, переданную с split(). Поскольку split() превращает строку в массив и принимает параметр разделителя. И поскольку мы хотим, чтобы каждый символ был помещен в свое собственное значение массива, мы просто установим для параметра значение '’. Это будет выглядеть так:

function reverseString(str) {
  const strArray = str.split('');
}

Затем мы могли бы использовать метод прототипа массива reverse(), который просто перевернет массив (умно, верно?). Итак, давайте перезапишем текущее значение.

function reverseString(str) {
  const strArray = str.split('');
  strArray.reverse();
}

Чтобы проверить это, мы можем вызвать функцию и передать строку, чтобы увидеть, что это нам дает. И не забудьте поставить console.log() внизу функции.

function reverseString(str) {
  const strArray = str.split('');
  strArray.reverse();
  console.log(strArray);
}
reverseString('Hello Medium');
// Output:
[ 'm', 'u', 'i', 'd', 'e', 'M', ' ', 'o', 'l', 'l', 'e', 'H' ]

Теперь, когда мы получили массив в обратном порядке, мы можем просто превратить его в обычную строку. И мы можем сделать это с помощью join(), который объединяет элементы массива в строку и возвращает строку. Мы также можем указать разделитель, как в случае с split(). Итак, давайте вернем новую строку с примененным методом join(). Тогда код будет выглядеть так:

function reverseString(str) {
  const strArray = str.split('');
  strArray.reverse();
  return strArray.join('');
}
reverseString('hello');
// Output: muideM olleH

Это нормально работает, но действительно беспорядочно. Честно говоря, нам даже не нужна переменная strArray! Что мы можем сделать, чтобы очистить это, - просто связать эти методы вместе, например:

function reverseString(str) {
  return str.split('').reverse().join('');
}
reverseString('Hello Medium');
// Output: muideM olleH

Вместо использования этих методов мы могли бы также использовать старый добрый цикл FOR! В этом примере мы будем использовать убывающий цикл FOR.

Первое, что нам нужно сделать, это создать новую переменную, содержащую пустую строку, в которой будет размещена новая созданная строка.

function reverseString(str) {
  let revString = "";  
}

Второй шаг - создать собственно цикл for. Мы будем использовать длину str, но так: str.length — 1, поскольку она будет соответствовать последней букве в строке. В нашем случае «м». Мы также будем выполнять цикл, пока i больше или равно 0, и уменьшать i после каждой итерации. Затем добавьте переменную newString к себе и к значению индекса массива str. Мы также должны вернуть revString.

function reverseString(str) {
  let revString = "";
  
  for (let i = str.length - 1; i >= 0; i--) {
    revString += str[i];
  }
  
  return revString;
  
}
reverseString('Hello Medium');
// Output: muideM olleH

Поздравляю! Теперь вы знаете два способа перевернуть строку в Javascript!

Вызов 2 - Палиндром

Во-первых, палиндром - это слово или фраза, которые одинаковы независимо от того, идут они вперед или назад. Некоторые примеры:

  • Анна
  • Но туба
  • Разве мы не чисты? "Нет, сэр!" Панамский угрюмый Норьега хвастается. «Это мусор!» Ирония обрекает человека; пленник до новой эры

Итак, что мы собираемся сделать, так это вернуть true, если слово или фраза является палиндромом, или вернуть false, если это не палиндром. Довольно просто!

Это наш начальный блок кода

function isPalindrome(str) {}

Первое, что мы могли бы сделать, это перевернуть строку, присвоить ей значение переменной, и, поскольку мы уже знаем, как это сделать, это будет очень просто! Я выберу наше первое решение, так как оно наиболее практично (на мой взгляд).

function isPalidrom(str) {
  const revString = str.split('').reverse().join('');
}

А поскольку палиндром - это то же самое, что и вперед, и назад, мы можем просто проверить, равны ли две разные строки!

function isPalidrom(str) {
  const revString = str.split('').reverse().join('');
  
  return revString === str;
}

Мы также можем немного привести в порядок код и, конечно, вызвать функцию и передать строку.

function isPalidrom(str) {
  return str === str.split('').reverse().join('');
}
isPalidrom('Hello Medium');
// Output: false

Как видите, это вернет false, поскольку «Hello Medium» не палидром! Но «разве мы не чисты? "Нет, сэр!" Панамский угрюмый Норьега хвастается. «Это мусор!» Ирония обрекает человека; пленник новой эры »!

function isPalidrom(str) {
  return str === str.split('').reverse().join('');
}
isPalidrom('Are we not pure? “No sir!” Panama’s moody Noriega brags. “It is garbage!” Irony dooms a man; a prisoner up to new era');
// Output: true

Одна короткая мысль! Если мы введем rAceCar, он вернет false, поскольку у нас есть заглавная C и заглавная A. Но не волнуйтесь, исправить это очень просто!

function isPalindrome(str) {
 str = str.toLowerCase(); 
 return str === str.split('').reverse().join('');
}
isPalidrom('rAceCar');
// Output: true

Здесь мы просто делаем строку строчной, а затем сравниваем их две.

Еще раз поздравляю! Теперь вы знаете, как проверить наличие палиндромов с помощью Javascript!

Последние замечания

Надеюсь, вы нашли это полезным. Это первая часть моей серии «Проблемы алгоритмов Javascript». Я постараюсь найти больше увлекательных и поучительных задач. Так что, пожалуйста, подпишитесь на меня здесь или в других моих социальных сетях, чтобы получать новости о предстоящих статьях!

Цели

В этом году у меня много целей. Самая важная из них - стать лучше в целом как разработчик, а также привлечь 100 подписчиков на Medium и публиковать здесь больше контента, который поможет другим узнавать что-то новое. Знание - сила!

Мартин Нордстрём

Instagram | Твиттер | Github