大体思路是先拿到纯净数据(只考虑字母数字),然后再判断是否是回文串,注意要统一大小写。
想到两种方式拿到纯净的数据
- 第一种是用asc码+arr.filter()进行筛选
- 第二种考虑用正则
拿到数据之后使用数组api:reverse()和join()直接对比字符串返回结果。
代码如下
var isPalindrome = function(s) {
if(!s) return true;
let arr = [];
for(let i=0;i<s.length;i++){
arr.push(s[i].toLowerCase());
}
let res = arr.filter((item)=>{
return (item.charCodeAt()>='a'.charCodeAt())&&(item.charCodeAt()<='z'.charCodeAt())||(item.charCodeAt()>=48)&&(item.charCodeAt()<=57)
})
return res.join('')===res.reverse().join('')
};
或正则
var isPalindrome = function(s) {
sArr = s.toLocaleLowerCase().match(/[a-z0-9]+/g);
if(!sArr) return true;
let str = sArr.join('')
let arr = [];
for(let i=0;i<str.length;i++){
arr.push(str[i]);
}
console.log(arr)
return arr.join('')===arr.reverse().join('')
};