/**
* @param {string} s
* @return {boolean}
*/
var isPalindrome = function(s) {
// 使用两个指针,分别从首尾向中间推进
let i = 0;
let j = s.length - 1;
// 不断对比每个合法字符,直到两个指针相遇
while (i < j) {
// 如果两个指针遇到非法字符,则跳过
// 为避免指针移动出现i >= j的情况,增加判断
while (!check(s[i]) && i < j) {
i++;
}
while (!check(s[j]) && i < j) {
j--;
}
// 如果发现两个字符不相等,则s不是回文串,返回false即可
// 无论判断结果如何,都将指针向中间移动一位
if (s[i++].toLowerCase() !== s[j--].toLowerCase()) {
return false;
}
}
// 能够退出循环,表示没有发现不相等的字符,s是回文串
return true;
};
// 判断字符是否合法
const check = (char) => {
if (
(char >= '0' && char <= '9') ||
(char >= 'a' && char <= 'z') ||
(char >= 'A' && char <= 'Z')
) {
return true;
}
return false;
};
评论