题目
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 - 1s= 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}
