var isPalindrome = function(s) {
if (!s.length) return true;
const alphaNumeric = filterAlphaNumeric(s);
const reversed = reverse(alphaNumeric);
return alphaNumeric === reversed;
};
const filterAlphaNumeric = (s, nonAlphaNumeric = new RegExp('[^a-z0-9]','gi')) => s
.toLowerCase()
.replace(nonAlphaNumeric, '')
const reverse = (s) => s
.split('')
.reverse()
.join('');
var isPalindrome = function(s) {
if (s.length <= 1) return true;
let [left, right] = [0, s.length - 1];
let leftChar, rightChar;
while (left < right) {
leftChar = s[left];
rightChar = s[right];
if (!/[a-zA-Z0-9]/.test(leftChar)) {
left++;
} else if (!/[a-zA-Z0-9]/.test(rightChar)) {
right--;
} else {
if (leftChar.toLowerCase() != rightChar.toLowerCase()) {
return false;
}
left++;
right--;
}
}
return true;
};
var isPalindrome = function (s) {
const isAlphaNumeric = c => (c.toLowerCase() >= 'a' && c.toLowerCase() <= 'z') || c >= '0' && c <= '9'
let left = 0;
let right = s.length - 1;
let skipLeft, skipRight, endsEqual = false;
while (left < right) {
skipLeft = !isAlphaNumeric(s.charAt(left))
if (skipLeft) { left++; continue; }
skipRight = !isAlphaNumeric(s.charAt(right))
if (skipRight) { right--; continue; }
endsEqual = s.charAt(left).toLowerCase() === s.charAt(right).toLowerCase()
if (!endsEqual) return false
left++
right--
}
return true
};