Valid Palindrome (E)

题目

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.

Note: For the purpose of this problem, we define empty string as valid palindrome.

Example 1:

Input: "A man, a plan, a canal: Panama"
Output: true

Example 2:

Input: "race a car"
Output: false

题意

忽略给定字符串中的非字母数字的字符,判断该字符串是否为回文串(忽略大小写)。

思路

Two pointers。


代码实现

Java

class Solution {
    public boolean isPalindrome(String s) {
        if (s.isEmpty()) {
            return true;
        }

        int i = 0, j = s.length() - 1;
        while (i < j) {
            while (i < j && !isAlphanumeric(s.charAt(i))) {
                i++;
            }
            while (i < j && !isAlphanumeric(s.charAt(j))) {
                j--;
            }

            char cI = s.charAt(i), cJ = s.charAt(j);
            cI = cI >= 'a' && cI <= 'z' ? (char) (cI - 32) : cI;
            cJ = cJ >= 'a' && cI <= 'z' ? (char) (cJ - 32) : cJ;

            if (cI != cJ) {
                return false;
            }
            
            i++;
            j--;
        }

        return true;
    }

    private boolean isAlphanumeric(char c) {
        return c >= '0' && c <= '9' || c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z';
    }
}

JavaScript

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function (s) {
  let left = 0, right = s.length - 1
  s= s.toLowerCase()
  while (left < right) {
    if (!/[a-z0-9]/.test(s[left])) {
      left++
    } else if (!/[a-z0-9]/.test(s[right])) {
      right--
    } else if (s[left++] !== s[right--]) {
      return false
    }
  }
  return true
}
内容来源于网络如有侵权请私信删除