Для начала давайте разберемся, что же значит это слово. Палиндром — в буквальном переводе перевертень (от греч. παλινδρομέω — возвращаться) — это слово или фраза, которые одинаково читаются по буквам или по словам как слева направо, так и справа налево, при этом полностью сохраняя свой смысл.
Цель: создать функцию, которая проверяет, является ли строка палиндромом. Например:
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);
а если строкой будет фраза ‘А роза упала на лапу Азора’? Эти функции будут работать?
С фразой “А роза упала на лапу Азора” и всеми ей подобными фразами функции работать не будут, потому что пробелы в ней расположены не симметрично.
Приветствую, вот если интересно, функция проверки на палиндромом цифр, слов, предложений
https://jsfiddle.net/gowest/3h5fzmx3/
P.S.
С JS знаком всего три дня )
Тут достаточно перегнать всё в верхний регистр и удалить все знаки, кроме букв.
Во втором варианте лучше всё-таки проверить каждый элемент, а не возвращать результат, сравнив первый символ с последним:
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
Посимвольное сравнение возвращает результат функции после первого же символа:
test = isPalindrome(“abcdedcba”);
test2 = isPalindrome(“abcdeda”);
>> isPalindrome result: str – yes str2 – yes
Нельзя запихивать return в положительную проверку внутри цикла.
Спасибо за замечание, функция в примере исправлена, теперь при проверке на палиндром сравнивает каждый символ.
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
Нужно еще перевести фразу в нижний регистр(ну или верхний), иначе не получится проверять слова если они написаные с большой буквы