Интересно, как писать палиндром в javascript, где я вводим разные слова и программы, если слово является палиндром или нет. Например, слово "полдень" - это палиндром, а плохо - нет.
Спасибо заранее.
Интересно, как писать палиндром в javascript, где я вводим разные слова и программы, если слово является палиндром или нет. Например, слово "полдень" - это палиндром, а плохо - нет.
Спасибо заранее.
function palindrome(str) {
var len = str.length;
var mid = Math.floor(len/2);
for ( var i = 0; i < mid; i++ ) {
if (str[i] !== str[len - 1 - i]) {
return false;
}
}
return true;
}
palindrome
вернется, если указанное слово является палиндромом, основываясь на boolean
значении (true/false)
ОБНОВИТЬ:
Я открыл щедрость по этому вопросу из-за производительности, и я провел исследование, и вот результаты:
Если мы имеем дело с очень большим количеством данных, таких как
var abc = "asdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfd";
for ( var i = 0; i < 10; i++ ) {
abc += abc; // making string even more larger
}
function reverse(s) { // using this method for second half of string to be embedded
return s.split("").reverse().join("");
}
abc += reverse(abc); // adding second half string to make string true palindrome
В этом примере палиндром является True, просто чтобы отметить
Опубликованная функция палиндрома дает нам время от 180 до 210 миллисекунд (в данном примере), а функция, опубликованная ниже с помощью string == string.split('').reverse().join('')
дает нам от 980 до 1010 миллисекунд.,
Детали машины:
Система: Ubuntu 13.10 Тип ОС: 32-битная RAM: 2 Гб Процессор: 3,4 ГГц * 2 Браузер: Firefox 27.0.1
Попробуйте следующее:
var isPalindrome = function (string) {
if (string == string.split('').reverse().join('')) {
alert(string + ' is palindrome.');
}
else {
alert(string + ' is not palindrome.');
}
}
document.getElementById('form_id').onsubmit = function() {
isPalindrome(document.getElementById('your_input').value);
}
Итак, этот script предупреждает результат, является ли это палиндром или нет. Вам нужно изменить your_id
с вашим идентификатором ввода и form_id
с помощью идентификатора формы, чтобы получить эту работу.
Используйте что-то вроде этого
function isPalindrome(s) {
return s == s.split("").reverse().join("") ? true : false;
}
alert(isPalindrome("noon"));
в качестве альтернативы вышеуказанный код может быть оптимизирован как [обновлен после правого комментария]
function isPalindrome(s) {
return s == s.split("").reverse().join("");
}
alert(isPalindrome("malayalam"));
alert(isPalindrome("english"));
Посмотрите на это:
function isPalindrome(word){
if(word==null || word.length==0){
// up to you if you want true or false here, don't comment saying you
// would put true, I put this check here because of
// the following i < Math.ceil(word.length/2) && i< word.length
return false;
}
var lastIndex=Math.ceil(word.length/2);
for (var i = 0; i < lastIndex && i< word.length; i++) {
if (word[i] != word[word.length-1-i]) {
return false;
}
}
return true;
}
Изменить: теперь выполняется половина операции сравнения, так как я повторяю только до половины слова, чтобы сравнить ее с последней частью слова. Быстрее для больших данных!
Поскольку строка представляет собой массив из char, не нужно использовать функции charAt!!!
Ссылка: http://wiki.answers.com/Q/Javascript_code_for_palindrome
Быстрый способ:
-Пропустить половину пути в цикле.
-Установить длину слова в переменной вместо вычисления каждый раз.
EDIT: Храните длину слова /2 во временной переменной, чтобы не вычислять каждый раз в цикле, как указано (mvw).
function isPalindrome(word){
var i,wLength = word.length-1,wLengthToCompare = wLength/2;
for (i = 0; i <= wLengthToCompare ; i++) {
if (word.charAt(i) != word.charAt(wLength-i)) {
return false;
}
}
return true;
}
Начнем с рекурсивного определения палиндрома:
Это определение может быть закодировано прямо в JavaScript:
function isPalindrome(s) {
var len = s.length;
// definition clauses 1. and 2.
if (len < 2) {
return true;
}
// note: len >= 2
// definition clause 3.
if (s[0] != s[len - 1]) {
return false;
}
// note: string is of form s = 'a' + t + 'a'
// note: s.length >= 2 implies t.length >= 0
var t = s.substr(1, len - 2);
return isPalindrome(t);
}
Вот еще один дополнительный тестовый код для оболочки MongoDB mongo JavaScript, в веб-браузере с отладчиком замените print() на console.log()
function test(s) {
print('isPalindrome(' + s + '): ' + isPalindrome(s));
}
test('');
test('a');
test('ab');
test('aa');
test('aab');
test('aba');
test('aaa');
test('abaa');
test('neilarmstronggnortsmralien');
test('neilarmstrongxgnortsmralien');
test('neilarmstrongxsortsmralien');
Я получил этот вывод:
$ mongo palindrome.js
MongoDB shell version: 2.4.8
connecting to: test
isPalindrome(): true
isPalindrome(a): true
isPalindrome(ab): false
isPalindrome(aa): true
isPalindrome(aab): false
isPalindrome(aba): true
isPalindrome(aaa): true
isPalindrome(abaa): false
isPalindrome(neilarmstronggnortsmralien): true
isPalindrome(neilarmstrongxgnortsmralien): true
isPalindrome(neilarmstrongxsortsmralien): false
Итеративное решение:
function isPalindrome(s) {
var len = s.length;
if (len < 2) {
return true;
}
var i = 0;
var j = len - 1;
while (i < j) {
if (s[i] != s[j]) {
return false;
}
i += 1;
j -= 1;
}
return true;
}
Взять удар. Однако трудно измерить производительность.
function palin(word) {
var i = 0,
len = word.length - 1,
max = word.length / 2 | 0;
while (i < max) {
if (word.charCodeAt(i) !== word.charCodeAt(len - i)) {
return false;
}
i += 1;
}
return true;
}
Мое мышление состоит в том, чтобы вместо charAt()
использовать charCodeAt()
с надеждой, что выделение Number
вместо String
будет лучше перфоманс, потому что String
является переменной длиной и может быть сложнее выделить. Кроме того, только итерация на полпути (как указано sai), потому что это все, что требуется. Кроме того, если длина нечетна (ex: 'aba'
), средний символ всегда в порядке.
Лучший способ проверить строку - это палиндром с большим количеством критериев, таких как регистр и специальные символы...
function checkPalindrom(str) {
var str = str.replace(/[^a-zA-Z0-9]+/gi, '').toLowerCase();
return str == str.split('').reverse().join('');
}
Вы можете проверить это с помощью следующих слов и строк и даст вам более конкретный результат.
1. боб
2. Док, обратите внимание, я не согласен. Пост никогда не предотвращает ожирение. Я на диете треска
Для строк он игнорирует специальные символы и преобразует строку в нижний регистр.
Самое главное, что нужно сделать при техническом тестировании, - Не использовать методы быстрого доступа - , они хотят видеть, как вы думаете алгоритмически! Не использование методов.
Вот один, который я придумал (через 45 минут после того, как я взорвал тест). Однако есть пара оптимизаций. При написании любого алгоритма лучше всего принять false
и изменить логику, если она выглядит как true
.
isPalindrome()
:
В принципе, чтобы выполнить этот прогон в O (N) (линейной) сложности, вы хотите иметь 2 итератора, векторы которых указывают друг на друга. Значение, один итератор, который начинается в начале и один, который начинается в конце, каждый из которых перемещается внутрь. Вы могли бы заставить итераторы пересекать весь массив и использовать условие для break
/return
, когда они встречаются посередине, но это может сэкономить некоторую работу, чтобы по умолчанию дать каждому итератору половину длины.
for
, похоже, заставляют использовать больше проверок, поэтому я использовал while
петли - что мне менее удобно.
Здесь код:
/**
* TODO: If func counts out, let it return 0
* * Assume !isPalindrome (invert logic)
*/
function isPalindrome(S){
var s = S
, len = s.length
, mid = len/2;
, i = 0, j = len-1;
while(i<mid){
var l = s.charAt(i);
while(j>=mid){
var r = s.charAt(j);
if(l === r){
console.log('@while *', i, l, '...', j, r);
--j;
break;
}
console.log('@while !', i, l, '...', j, r);
return 0;
}
++i;
}
return 1;
}
var nooe = solution('neveroddoreven'); // even char length
var kayak = solution('kayak'); // odd char length
var kayaks = solution('kayaks');
console.log('@isPalindrome', nooe, kayak, kayaks);
Обратите внимание, что если циклы подсчитываются, возвращается true
. Вся логика должна быть инвертирована так, чтобы она по умолчанию возвращала false
. Я также использовал один метод коротких выкроек String.prototype.charAt(n)
, но я чувствовал себя хорошо с этим, поскольку каждый язык поддерживает этот метод.
function palindrome(str) {
var lenMinusOne = str.length - 1;
var halfLen = Math.floor(str.length / 2);
for (var i = 0; i < halfLen; ++i) {
if (str[i] != str[lenMinusOne - i]) {
return false;
}
}
return true;
}
Оптимизирован для парсинга с половинной строкой и для постоянных переменных значений.
Я думаю, что следующая функция с временной сложностью o (log n) будет лучше.
function palindrom(s){
s = s.toString();
var f = true; l = s.length/2, len = s.length -1;
for(var i=0; i < l; i++){
if(s[i] != s[len - i]){
f = false;
break;
}
}
return f;
}
console.log(Palindrom (12321));
Вот еще один способ сделать это:
function isPalin(str) {
str = str.replace(/\W/g,'').toLowerCase();
return(str==str.split('').reverse().join(''));
}
function isPalindrome(s,i) {
return (i=i||0)<0||i>=s.length>>1||s[i]==s[s.length-1-i]&&isPalindrome(s,++i);
}
function palindrome(str) {
var re = /[^A-Za-z0-9]/g;
str = str.toLowerCase().replace(re, '');
var len = str.length;
for (var i = 0; i < len/2; i++) {
if (str[i] !== str[len - 1 - i]) {
return false;
}
}
return true;
}
Или вы можете сделать это вот так.
var palindrome = word => word == word.split('').reverse().join('')
Как насчет этого?
function pall (word) {
var lowerCWord = word.toLowerCase();
var rev = lowerCWord.split('').reverse().join('');
return rev.startsWith(lowerCWord);
}
pall('Madam');
Эта функция удалит все небуквенные символы (знаки препинания, пробелы и символы) и повернет все нижний регистр, чтобы проверить наличие палиндромов.
function palindrome(str){
var re = /[^A-Za-z0-9]/g;
str = str.toLowerCase().replace(re, '');
return str == str.split('').reverse().join('') ? true : false;
}
Здесь однострочник без использования String.reverse,
const isPal = str => Array
.apply(null, new Array(strLen = str.length))
.reduce((acc, s, i) => acc + str[strLen - (i + 1)], '') === str;
str1
- исходная строка с удаленными не алфавитно-цифровыми символами и пробелами, а str2
- исходная строка в обратном порядке.
function palindrome(str) {
var str1 = str.toLowerCase().replace(/\s/g, '').replace(
/[^a-zA-Z 0-9]/gi, "");
var str2 = str.toLowerCase().replace(/\s/g, '').replace(
/[^a-zA-Z 0-9]/gi, "").split("").reverse().join("");
if (str1 === str2) {
return true;
}
return false;
}
palindrome("almostomla");
Примечание. Это чувствительно к регистру
function palindrome(word)
{
for(var i=0;i<word.length/2;i++)
if(word.charAt(i)!=word.charAt(word.length-(i+1)))
return word+" is Not a Palindrome";
return word+" is Palindrome";
}
Вот скрипка: http://jsfiddle.net/eJx4v/
Я не уверен, как этот JSPerf проверяет производительность кода. Я просто попытался изменить строку и проверить значения. Прокомментируйте преимущества и недостатки этого метода.
function palindrome(str) {
var re = str.split(''),
reArr = re.slice(0).reverse();
for (a = 0; a < re.length; a++) {
if (re[a] == reArr[a]) {
return false;
} else {
return true;
}
}
}
function palindrome(str){
for (var i = 0; i <= str.length; i++){
if (str[i] !== str[str.length - 1 - i]) {
return "The string is not a palindrome";
}
}
return "The string IS a palindrome"
}
palindrome("abcdcba"); //"The string IS a palindrome"
palindrome("abcdcb"); //"The string is not a palindrome";
Если вы выполните console.log эту строку: console.log(str[i] + " and " + str[str.length - 1 - i])
, перед оператором if вы увидите, что такое (str[str.length - 1 - i])
. Я думаю, что это самая запутанная часть, но вы получите ее легко, когда вы проверите ее на своей консоли.
Все эти петли! Как насчет некоторой функциональной доброты:) Может зайти в проблемы с хвостом на старых/текущих js-машинах, которые были решены в ES6
function isPalendrome(str){
var valid = false;
if(str.length < 2 ) return true;
function even(i,ii){
str[i]===str[ii] ? ((i+1 !== ii) ? even(i+1,ii-1) : valid = true) : null
}
function odd(i, ii){
str[i]===str[ii] ? ((i !== ii) ? odd(i+1,ii-1) : valid = true) : null
}
if(str.length % 2){
return odd(0,str.length-1),valid;
}else{
return even(0,str.length-1),valid;
}
}
Чтобы проверить, что ваш стек вызовов запускает этот код, вы сможете анализировать строки, удваивающие размер стека вызовов
function checkStackSize(){
var runs = 70000;
var max_process = 1;
var max = 0;
function recurse_me() {
max_process++;
if(max_process === runs) return;
max = max_process;
try {
recurse_me()
} catch(e) {
max = max_process;
}
}
recurse_me()
console.log(max);
}
Из-за симметричности проблемы вы можете вырезать строку извне и обрабатывать куски, находящиеся в пределах ограничений стека вызовов.
тем я имею в виду, если длина палиндромов равна 1000. Вы можете присоединиться к 0-250 и 750-1000 и присоединиться к 250-499 с 500-749. Затем вы можете передать каждый фрагмент функции. Преимущество этого заключается в том, что вы можете запускать процесс параллельно, используя веб-работников или потоки для очень больших наборов данных.
Ниже код рассказывает, как получить строку из текстового поля и указать, является ли это палиндром, и отображает ваш ответ в другом текстовом поле
<html>
<head>
<meta charset="UTF-8"/>
<link rel="stylesheet" href=""/>
</head>
<body>
<h1>1234</h1>
<div id="demo">Example</div>
<a accessKey="x" href="http://www.google.com" id="com" >GooGle</a>
<h1 id="tar">"This is a Example Text..."</h1>
Number1 : <input type="text" name="txtname" id="numb"/>
Number2 : <input type="text" name="txtname2" id="numb2"/>
Number2 : <input type="text" name="txtname3" id="numb3" />
<button type="submit" id="sum" onclick="myfun()" >count</button>
<button type="button" id="so2" onclick="div()" >counnt</button><br/><br/>
<ol>
<li>water</li>
<li>Mazaa</li>
</ol><br/><br/>
<button onclick="myfun()">TryMe</button>
<script>
function myfun(){
var pass = document.getElementById("numb").value;
var rev = pass.split("").reverse().join("");
var text = document.getElementById("numb3");
text.value = rev;
if(pass === rev){
alert(pass + " is a Palindrome");
}else{
alert(pass + " is Not a Palindrome")
}
}
</script>
</body>
</html>
function palindrome(str) {
var testString = str.toLowerCase();
var expression = /[a-z0-9\^s]/gi;
if (testString.match(expression).reverse().join("") == testString.match(expression).join("")) {
return true;
} else {
return false;
}
}
Вы также можете сделать что-то вроде этого:
function isPalindrome(str) {
var newStr = '';
for(var i = str.length - 1; i >=0; i--) {
newStr += str[i];
}
if(newStr == str) {
return true;
return newStr;
} else {
return false;
return newStr;
}
}
ES6 способ сделать это. Обратите внимание, что я использую метод массива reduceRight, чтобы изменить строку (вы можете использовать методы массива для строк, если вы передаете строку как контекст, поскольку строки с низким уровнем - это массивы символов). Нет, это не так эффективно, как другие решения, но не видел ответа, который пришел, используя функции es6 или более высокого порядка, поэтому я бы выбрал этот вариант там.
const palindrome = str => {
const middle = str.length/2;
const left = str.slice(0, middle)
const right = Array.prototype.reduceRight.call(str.slice(Math.round(middle)), (str, char) => str + char, '')
return left === right;
}
Чтобы избежать ошибок со специальными символами, используйте эту функцию ниже
function palindrome(str){
var removeChar = str.replace(/[^A-Z0-9]/ig, "").toLowerCase();
var checkPalindrome = removeChar.split('').reverse().join('');
if(removeChar === checkPalindrome){
return true;
}else{
return false;
}
}
Коротко быстрый и понятный код.
TL; DR
Объяснение:
Здесь isPalindrome
функция принимает параметр str
, который является строкой типа.
Если вышеприведенный случай является ложным, то он переходит во второй оператор if и проверяет, что, если символ в позиции 0 строки совпадает с символом на последнем месте. Он выполняет тест неравенства между ними.
str.charAt(0) // gives us the value of character in string at position 0
str.slice(-1) // gives us the value of last character in the string.
Если результат неравенства верен, то он идет вперед и возвращает false.
isPalindrome(str)
снова и снова до окончательного результата.
function isPalindrome(str){
if (str.length <= 1) return true;
if (str.charAt(0) != str.slice(-1)) return false;
return isPalindrome(str.substring(1,str.length-1));
};
document.getElementById('submit').addEventListener('click',function(){
var str = prompt('whats the string?');
alert(isPalindrome(str))
});
document.getElementById('ispdrm').onsubmit = function(){alert(isPalindrome(document.getElementById('inputTxt').value));
}
<!DOCTYPE html>
<html>
<body>
<form id='ispdrm'><input type="text" id="inputTxt"></form>
<button id="submit">Click me</button>
</body>
</html>
Это проверяет каждый конец строки, выходящей наружу, возвращая false, как только обнаруживается отсутствие симметрии. Для слов с нечетным количеством букв центральная буква не проверяется.
function isPalindrome(word){
var head = 0;
var tail = word.length - 1;
while (head < tail) {
if (word.charAt(head) !== word.charAt(tail)){
return false
} else {
head ++;
tail --;
}
};
return true;
};