Палиндромы - это слова, фразы и даже числа, которые читаются одинаково вперед и назад. Довольно распространены короткие палиндромы, такие как: цивик, байдарка, уровень, мадам, полдень, радар, ротор и соло. Они также встречаются в таких именах, как Ева, Ханна, Анна, Отто и Боб.
Фон
Слово палиндром было создано в 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-хромосом является палиндромами. Это означает, что эти последовательности могут самовосстановиться, сгибаясь посередине и образуя шпильку для волос.
И это конец нашего путешествия по палиндрому! В следующем алгоритме мы будем играть с шифрованием !!
Предыдущие алгоритмы: Вычислить факториал числа.