Pages Menu Stijit.com
Twitter
Categories Menu
Проверка является ли строка палиндромом на javascript

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

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

Цель: создать функцию, которая проверяет, является ли строка палиндромом. Например:
var str = 'abcdedcba',
str2 = 'abcded';
isPalindrome(str); // -> yes
isPalindrome(str2); // -> no
Результатом работы функции является строка с ответом — ‘yes’ или ‘no’.

<!doctype html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
</head>
<body>
<script>

  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);

</script>
</body>
</html>

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

<!doctype html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
</head>
<body>
<script>

  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);

</script>
</body>
</html>

6 Коммент.

  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 в положительную проверку внутри цикла.

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

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *