Рубрики
Без рубрики

Прохождение проекта Checker Palindrome FreeCodecamp

Проект 1 от JavaScript ALGOS и DS сертификации. Это блог версия моего прохождения. Если вы предпочитаете видео вот видео ссылка на YouTube. Задача написать функцию под названием Palindrome, которая берет строку, ул. Если ул. Ул. Палиндром, вернитесь, иначе верните ложь. Что такое

Автор оригинала: FreeCodeCamp Community Member.

Проект 1 от JavaScript ALGOS и DS сертификации.

Это блог версия моего прохождения. Если вы предпочитаете видео Вот видео на YouTube Отказ

Соревнование

Написать функцию под названием Палиндром который берет строку, утра Отказ Если утра Палиндром, возврат правда иначе вернуть ложь Отказ

Что такое палиндром?

Палиндром – это слово, которое читает одинаковые вперед и назад. Некоторые примеры

  • Глаз
  • Гоночный автомобиль
  • Человек, план, канал – Панама!

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

Шаг 0 – Шаг от кода

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

Код должен прийти в прошлом

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

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

Шаг 1 – Выравнивайте весь корпус

Palidnromome действителен, читает ли его корпус одинаковых форвардов или назад. Таким образом, «RaceCar» действительно, даже если это технически написано «RaceCar» назад.

Чтобы защитить нас против любых вопросов обсадной колонны, я добавлю комментарий, говоря, что все будет строчным.

Вот мой код до сих пор (обратите внимание, что я написал не настоящий код еще).

function palindrome(str) {
  // 1) Lowercase the input
}



palindrome("eye");

Шаг 2 – Потрите не буквенно-цифровые символы

Как и сценарий корпуса, палиндром действителен, даже если пунктуация и пробелы не являются последовательными взад и вперед.

Например, «мужчина, план, канал – Панама!» действителен, потому что мы изучаем это без каких-либо следов или пробелов. Если вы делаете это и строчные, все это становится.

"A Man, A Plan, A Canal – Panama!"

// lowercase everything
// strip out non-alphanumeric characters

"amanaplanacanalpanama"

Который читает одинаковые вперед и назад.

Что означает буквенно-цифровой?

Это означает «буквы и цифры», поэтому что-либо из A-Z и 0-9 является буквенно-цифровым символом. Для того, чтобы правильно изучить наши входные не буквенно-цифровые символы (пробелы, пунктуацию и т. Д.).

Вот наш обновленный псевдокод.

function palindrome(str) {
  // 1) Lowercase the input
  // 2) Strip out non-alphanumeric characters
}



palindrome("eye");

Шаг 3 – Сравните строку до его обратного

Как только наша строка правильно очищена, мы можем перевернуть его и посмотреть, читает ли он то же самое.

Я думаю о сравнении вдоль этих строк

return string === reversedString

Я использую тройную равную ( === ) для сравнения в JavaScript. Если две строки идентичны, это палиндром, и мы возвращаем правда ! Если нет, мы вернемся ложь Отказ

Вот наш обновленный псевдокод.

function palindrome(str) {
  // 1) Lowercase the input
  // 2) Strip out non-alphanumeric characters
  // 3) return string === reversedString
}



palindrome("eye");

Выполнение шага 1 – строчные буквы

Это самый простой шаг. Если вы не уверены, как что-то строчное в JavaScript, быстрый поиск Google должен привести к Толкание метод.

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

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

function palindrome(str) {
  // 1) Lowercase the input
  const alphanumericOnly = str.toLowerCase();
  
  // 2) Strip out non-alphanumeric characters
  // 3) return string === reversedString
}



palindrome("eye");

Выполнение шага 2 – буквенно-цифровой

Нам придется немного глубже, так как это самый сложный шаг. Как именно мы собираемся очистить строку своих не буквенно-цифровых символов?

Метод

Так же, как Толкание Все строки поддерживают метод под названием Матч Отказ Требуется параметр, указывающий, какой символ (ы) вы хотели бы искать в данной строке.

Давайте использовать свое имя в качестве примера.

myName = 'yazeed';

myName.match('e');
// ["e", index: 3, input: "yazeed", groups: undefined]

Как вы можете увидеть .match Возвращает массив с какой-то информацией. Часть, которую мы заботимся о том, это первый элемент 'E' Отказ Это матч, которую мы нашли в строке «Яазид» Отказ

Но у меня зовут два E’s! Как мы подходим другой?

Регулярные выражения (Regex)

.match Первый параметр метода может вместо этого быть регулярное выражение Отказ

Регулярное выражение – последовательность символов, которые определяют шаблон поиска. Также известен как «Regex».

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

myName = 'yazeed';

myName.match(/e/);
// ["e", index: 3, input: "yazeed", groups: undefined]

Мы получаем тот же результат, поэтому кто заботится? Хорошо проверить это, Regex позволяет нам добавить Флаги Отказ

Флаг Regex – индикатор, который говорит поручению, чтобы сделать что-то особенное.

myName = 'yazeed';

myName.match(/e/g);
// ^^ Notice the little g now ^^
// ["e", "e"]

Мы вернулись все E’s! Если вы попробуете A или Z, вы получите массив всего одного матча. Имеет смысл.

myName.match(/a/g);
// ["a"]

myName.match(/z/g);
// ["z"]

Найти все буквенно-цифровые символы

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

Если вы немного Google, это может быть Regex, который вы найдете для сопоставления всех буквенно-цифровых символов.

/[a-z0-9]/g

Вы смотрите на определение буквенно-цифровой Отказ Это регулярное выражение может быть разбито на 3 части.

  1. Набор символов [] – Сопоставьте любой символ между этими кронштейнами.
  2. A-Z – Сопоставьте все строчные буквы
  3. 0-9 – Сопоставьте все номера

Работает на MyName Возвращает массив каждой буквы.

myName = 'yazeed';

myName.match(/[a-z0-9]/g);
// ["y", "a", "z", "e", "e", "d"]

Давайте попробуем это одним из тестов проекта. Как насчет этого сумасшедшего они ожидают быть палиндром?

crazyInput = '0_0 (: /-\ :) 0-0';

crazyInput.match(/[a-z0-9]/g);
// ["0", "0", "0", "0"]

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

function palindrome(str) {
  const alphanumericOnly = str
        // 1) Lowercase the input
        .toLowerCase()
        // 2) Strip out non-alphanumeric characters
        .match(/[a-z0-9]/g);
  
  // 3) return string === reversedString
}



palindrome("eye");

Выполнение шага 3 – Сравните строку к его обратному

Помните, что .match Возвращает массив матчей. Как мы можем использовать этот массив, чтобы сравнить нашу очищенную строку к ее обращению?

Array.Reverse

Обратный Метод, верный своему названию, переворачивает элементы массива.

[1, 2, 3].reverse();
// [3, 2, 1]

Это выглядит довольно полезно! После сопоставления всех буквенно-цифровых символов мы можем перевернуть этот массив и увидеть, если все еще строки вверх.

Но сравнение массивов не так просты, как сравнение строк, так как мы можем перевернуть этот массив спичек обратно в строку?

Array.join.

Присоединяйтесь к Метод стежет элементы вашего массива вместе в строку, необязательно, принимая разделитель Отказ

Разделитель является первым параметром, вам не нужно его поставлять. Это в основном «строгла» ваш массив.

[1, 2, 3].join();
// "1,2,3"

Если вы поставляете его, сепаратор находится между каждым элементом.

[1, 2, 3].join('my separator');
// "1my separator2my separator3"

[1, 2, 3].join(',');
// "1,2,3"

[1, 2, 3].join(', ');
// "1, 2, 3"

[1, 2, 3].join('sandwich');
// "1sandwich2sandwich3"

Посмотрим, как это впишется в наш алгоритм.

'Ra_Ce_Ca_r   -_-'
    .toLowerCase()
    .match(/[a-z0-9]/g)
    .join('');

// "racecar"

Посмотрите, как делать все, что просто воссоздает оригинальную строку без пунктуации или смешанного корпуса?

Что если мы поменяем это?

'Ra_Ce_Ca_r   -_-'
    .toLowerCase()
    .match(/[a-z0-9]/g)
    // flip it around
    .reverse()
    .join('');

// "racecar"

Это палиндром! Меня зовут не будет палиндром.

'yazeed'
    .toLowerCase()
    .match(/[a-z0-9]/g)
    // flip it around
    .reverse()
    .join('');

// "deezay"

Кажется, у нас есть наше решение. Давайте посмотрим последний код.

Последний код

function palindrome(str) {
    const alphanumericOnly = str
        // 1) Lowercase the input
        .toLowerCase()
        // 2) Strip out non-alphanumeric characters
        .match(/[a-z0-9]/g);
        
    // 3) return string === reversedString
    return alphanumericOnly.join('') ===
        alphanumericOnly.reverse().join('');
}



palindrome("eye");

Введите это и запустите тесты, и мы хорошо!

Резюме

  1. Строчные входные данные через str.tolowercase () ;
  2. Сопоставьте все буквенно-цифровые символы, используя регулярное выражение через str.match (/[a-z0-9]/g) Отказ
  3. Использовать Array.reverse и Array.join на буквенно-цифровых матчах, чтобы сравнить оригинал против его обратного я. Если они идентичны, мы вернемся правда иначе мы вернемся ложь !

Спасибо за чтение

Если вы хотите видео с еще более подробно, Вот версия YouTube снова !

Для большего количества контента посмотрите https://yazeedb.com Отказ И, пожалуйста, дайте мне знать, что еще вы хотели бы видеть! Мои DMS открыты в Twitter.

До скорого!