Палиндромы - это слова, фразы и даже числа, которые читаются одинаково вперед и назад. Довольно распространены короткие палиндромы, такие как: цивик, байдарка, уровень, мадам, полдень, радар, ротор и соло. Они также встречаются в таких именах, как Ева, Ханна, Анна, Отто и Боб.

Фон

Слово палиндром было создано в 17 веке английским драматургом Бен Джонсон от греческих корней palin (πάλιν; снова) и dromos ( δρóμος; путь или направление).

Площадь Сатор - наверное, самый старый известный нам палиндром. Версия была найдена на стене в городе Геркуланум, погребенной в пепле в 79 году нашей эры. Этот латинский палиндромный квадрат можно перевести как:

«Арепо-сеятель бережно держит колеса».

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

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

Код

Но пока этого достаточно. Давайте код!

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

split('').reverse().join(''); 
For example:

function reverse (string) {
 var newString = string.split('').reverse().join('');
 return newString;
}
reverse("marina");/// gives us "aniram"

P.S. Вы также можете использовать цикл for или .reverse () для обращения массива.

Полная функция проверки палиндрома будет выглядеть так:

function checkPalindrome(str) {
  return str == str.split('').reverse().join('');
}
checkPalindrome("racecar"); //return true
checkPalindrome("palindrome"); //return false
checkPalindrome("1890981"); //return true

Разбираться в фразах

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

Взгляните на этот знаменитый палиндром:

Человек, план, канал: Панама.

Если бы мы проверили его в нашей функции checkPalindrome, она скажет, что это НЕ палиндром. То же самое с «гоночным автомобилем» и «гоночным автомобилем».

Regex (или regexp) спешит на помощь!

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

(Регулярные выражения - довольно обширная тема, и есть много ресурсов, которые объясняют их. Вы можете прочитать о них больше в этом руководстве.)

Регулярное выражение, которое мы собираемся использовать, выглядит так:

/[^a-z0-9]+/g
[^a-z] matches the characters that is not found between a and z
[^0-9] matches the characters that is not found between 0 and 9
The g flag says that it should be a global search. It will look for every occurrence instead of just the first one.

Теперь наша проверка палиндрома будет выглядеть так:

1. function isPalindrome(str) {
2.   str = str.toLowerCase().replace(/[^a-z0-9]+/g, '');
3.
4.  return str === str.split('').reverse().join('');
5. }

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

'' . (Which means nothing in this case.)
PS. Remember that you can ONLY use .replace() with 'strings'!!

В четвертой строке функции мы снова проверяем, является ли строка палиндромом. Точно так же, как мы это сделали в функции checkPalindrome.

Давайте играть!

Скопируйте или напишите код в вашей консоли и проверьте, действительно ли эти слова и предложения с rinkworks.com являются палиндромами.

Вот несколько моих любимых:

"Eva, can I stab bats in a cave?"
"Murder for a jar of red rum."
"Was it a car or a cat I saw?"
"Straw? No, too stupid a fad; I put soot on warts."

Палиндромы в реальном мире

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

Последовательность ДНК AACTAGGC имеет комплемент нуклеотид за нуклеотидом, который представляет собой TTGATCCG. Если вы измените порядок нуклеотидов в строке дополнения, вы получите исходную последовательность. Этот эффект «зеркальной» последовательности имеет решающее значение для репликации и восстановления клеток.

Недавние исследования показали, что большая часть последовательностей X- и Y-хромосом является палиндромами. Это означает, что эти последовательности могут самовосстановиться, сгибаясь посередине и образуя шпильку для волос.

И это конец нашего путешествия по палиндрому! В следующем алгоритме мы будем играть с шифрованием !!

Предыдущие алгоритмы: Вычислить факториал числа.