/** * @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;};
评论