0125. Valid Palindrome (E)
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
}