给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true

示例 2:

输入: "race a car"
输出: false

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


这道题比较简单
拿到字符串正则替换掉不是字母数字的字符,这里需要注意一个点。
有的小伙伴可能正则直接选用 \w 或者 \W,然而以上两个匹配都是包含下划线的,题目要求是只考虑数字和字母。
然后替换之后全部转换为小写。
最后就是比较,既然是回文字符串,那么翻转一下也应该和原字符串相等。
就两句,简单易理解。
这里的双指针写法其实也比较简单,我就不写了。

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function (s) {
    let flag = s.replace(/[^\a-zA-Z0-9]/g, '').toLowerCase();
    return flag == flag.split('').reverse().join('');
};