Проверка является ли строка палиндромом на javascript

Проверка является ли строка палиндромом на javascript

Для начала давайте разберемся, что же значит это слово. Палиндром — в буквальном переводе перевертень (от греч. παλινδρομέω — возвращаться) — это слово или фраза, которые одинаково читаются по буквам или по словам как слева направо, так и справа налево, при этом полностью сохраняя свой смысл.

Цель: создать функцию, которая проверяет, является ли строка палиндромом. Например:

var str = 'abcdedcba',
str2 = 'abcded';
isPalindrome(str); // -> yes
isPalindrome(str2); // -> no

Результатом работы функции является строка с ответом - 'yes' или 'no'.

function isPalindrome(str) {
    var strLen = str.length,
        strReverse = str.split('').reverse().join(''); // Разбиваем строку посимвольно  и превращаем ее в массив с помощью split(''), потом применяем к нему метод reverse() и собираем все символы в строку с помощью join('')
    if (strReverse == str) {
        return 'yes';
    } else {
        return 'no';
    }
}

test = isPalindrome('abcdedcba');
test2 = isPalindrome('abcded');

console.log(test);
console.log(test2);
document.write('isPalindrome result: ' + 'str - ' + test + ' str2 - ' + test2);

Альтернативный вариант проверки на палиндром - посимвольное сравнение начала и конца строки:

function isPalindrome(str) {
    var strLen = str.length;
    var result = '';
    for (var i = 0; i < strLen; i++) {
        if (str\[i\] === str\[strLen - 1 - i\]) { // Сравниваем все элементы от начала строки со всеми элементами с конца строки
            result = 'yes';
        } else {
            result = 'no';
            return result;
        }
    }
    return result;
}

test = isPalindrome('abcdedcba');
test2 = isPalindrome('abcded');

console.log(test);
console.log(test2);
document.write('isPalindrome result: ' + 'str - ' + test + ' str2 - ' + test2);

9 Комментариев

  1. а если строкой будет фраза ‘А роза упала на лапу Азора’? Эти функции будут работать?

    • С фразой “А роза упала на лапу Азора” и всеми ей подобными фразами функции работать не будут, потому что пробелы в ней расположены не симметрично.

      • Приветствую, вот если интересно, функция проверки на палиндромом цифр, слов, предложений

        https://jsfiddle.net/gowest/3h5fzmx3/

        P.S.
        С JS знаком всего три дня )

    • Тут достаточно перегнать всё в верхний регистр и удалить все знаки, кроме букв.

  2. Во втором варианте лучше всё-таки проверить каждый элемент, а не возвращать результат, сравнив первый символ с последним:

    for (var i = 0; i < strLen; i++) {
    if (str[i] == str[strLen – 1 – i]) {
    return "yes";
    } else {
    return "no";
    }
    }

    Примерчики:
    test = isPalindrome("abcdedcba");
    test2 = isPalindrome("abcdeda");

    Результатик:
    isPalindrome result: str – yes str2 – yes

  3. Посимвольное сравнение возвращает результат функции после первого же символа:

    test = isPalindrome(“abcdedcba”);
    test2 = isPalindrome(“abcdeda”);

    >> isPalindrome result: str – yes str2 – yes

    Нельзя запихивать return в положительную проверку внутри цикла.

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

  4. function isPal(value){
    var palArr = value.split(”);
    var reverseVal=”;
    for(var i=0; i<palArr.length; i++){
    if(palArr[i]===' ') palArr.splice(i,1);
    }
    var inputValue = palArr.join('').toLowerCase();
    reverseVal = palArr.reverse().join('').toLowerCase();
    if(inputValue.indexOf(reverseVal)!=-1) return true;
    else return false;

    }
    console.log(isPal('Anna')); // true
    console.log(isPal('А роза упала на лапу Азора')); //true
    console.log(isPal('Вася')); //false
    console.log(isPal('12321')); //true
    console.log(isPal('123212')); //false

  5. Нужно еще перевести фразу в нижний регистр(ну или верхний), иначе не получится проверять слова если они написаные с большой буквы