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
Solution
Solution 1 (Using regex)
class Solution {
public boolean isPalindrome(String s) {
s = s.replaceAll("[^a-z^A-Z^0-9]", "");
s = s.toLowerCase();
for(int i = 0,j=s.length()-1;i!=j && i<j;i++,j--){
if(s.charAt(i)!=s.charAt(j))
return false;
}
return true;
}
}
Solution 2
class Solution {
public boolean isPalindrome(String s) {
if(s == null || s.length() == 0){
return true;
}
int left = 0 ;
int right = s.length() - 1 ;
while(left < right){
while(left < right && !Character.isLetterOrDigit(s.charAt(left))){
left++;
}
while(left < right && !Character.isLetterOrDigit(s.charAt(right))){
right--;
}
if(!(Character.toLowerCase(s.charAt(left)) == Character.toLowerCase(s.charAt(right)))){
return false;
}
left ++;
right --;
}
return true;
}
}