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: trueExample 2:
Input: "race a car" Output: false
Approach #1: Character + String. [Java]
public boolean isPalindrome(String s) {
if (s == null) return true;
String temp = s.replaceAll("[^a-zA-Z0-9]", "");
int n = temp.length();
for (int l = 0, r = n-1; l <= r; ++l, --r) {
if (Character.toLowerCase(temp.charAt(l)) != Character.toLowerCase(temp.charAt(r)))
return false;
}
return true;
}
Approach #2: Make Map. [Java]
private static final char[] charMap = new char[256];
static {
for (int i = 0; i < 10; ++i)
charMap[i+'0'] = (char)(1 + i);
for (int i = 0; i < 26; ++i)
charMap[i+'a'] = charMap[i+'A'] = (char)(11 + i);
}
public boolean isPalindrome(String s) {
char[] pChars = s.toCharArray();
int start = 0, end = pChars.length - 1;
char cs, ce;
while (start < end) {
cs = charMap[pChars[start]];
ce = charMap[pChars[end]];
if (cs != 0 && ce != 0) {
if (cs != ce) return false;
start++;
end--;
} else {
if (cs == 0) start++;
if (ce == 0) end--;
}
}
return true;
}
Reference:
https://www.tutorialspoint.com/java/lang/character_tolowercase.htm