给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
    说明:本题中,我们将空字符串定义为有效的回文串。

    1. /**
    2. * 数组翻转
    3. */
    4. var isPalindrome = function (s) {
    5. return (
    6. (s = s.replace(/[^A-Za-z0-9]/g, '').toLowerCase()),
    7. s.split('').reverse().join('') === s
    8. )
    9. }
    /**
     * 双指针
     * 时间复杂度:O(|s|)
     * 空间复杂度:O(|s|)
     */
    var isPalindrome = function (s) {
      let i = 0
      let j = s.length - 1
      while (i < j) {
        while (!check(s[i]) && i < j) {
          i++
        }
        while (!check(s[j]) && i < j) {
          j++
        }
        if (s[i++].toLowerCase() !== s[j--].toLowerCase()) {
          return false
        }
      return true
    }
    
    function check(s) {
      return /[A-Za-z0-9]/.test(s)
    }