A palindrome is a word, phrase, number, or other sequence of symbols or elements, whose meaning may be interpreted the same way in either forward or reverse direction. Famous examples include "Amore, Roma", "A man, a plan, a canal: Panama" and "No 'x' in 'Nixon'". - wikipedia
如果一个字符串(忽略标点符号、大小写和空格)正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。
栗子:
"Amore, Roma" => valid
"A man, a plan, a canal: Panama" => valid
"No 'x' in 'Nixon'" => valid
"Abba Zabba, you're my only friend" => invalid
方案一:
function isPalindrome(line) {
line += "";
return line === line.split("").reverse().join("");
}
方案二:
function isPalindrome(line) {
line += "";
for(var i=0,j=line.length-1;i<j;i++,j--){
if(line.charAt(i) !== line.charAt(j)){
return false;
}
}
return true;
}
方案三:
function isPalindrome(str) {
str = str.replace(/W/g, '').toLowerCase();
return (str == str.split('').reverse().join(''));
}
//W: 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
方案四:
function palindrome(string) {
var sanitized = string.replace(/[^A-Za-z]/g, "").toLowerCase();
return sanitized == sanitized.split("").reduceRight(function(sum, v) {return sum + v;});
}
方案五:
function palindrome(string) {
var s = string.replace(/[^A-Za-z0-9]/g, "").toLowerCase();
for (var i = 0; i < s.length/2; i++) if (s[i] != s[s.length-i-1]) return false;
return true;
}
方案六:
function palindrome(string) {
var s = string.toLowerCase().replace(/[^a-z0-9]+/g, '');
return s == s.split('').reduce(function(str, value) {
return value+str;
}, '');
}
方案七:
function palindrome(string) {
return string.toLowerCase().replace(/[^a-z]/gi,'').split('').every(function(a,b,c){
return a===c[c.length-b-1]
})
}
方案八:
function palindrome(string) {
return string
.toLowerCase()
.replace(/[^a-z]/g,'')
.split("")
.every(function(v, i, array){ return v == array[array.length-i-1] })
;
}
参考:
https://github.com/dwqs/awesome-codewars/blob/master/codewars/palindrome-for-your-dome.md