The idea is simply to walk the string from the borders towards the middle at the same time, skipping characters that are not alphanumeric until we either reach the middle or find two characters which are not same. Also, a single character is palindrome.
You can check my Gist for the code (isPalindrome) with tests:
public static boolean isPalindrome(String s){
if(s == null || s.length() < 1)return false;
for(int i = 0, j = s.length() - 1; j > i; ){
if(!Character.isLetterOrDigit(s.charAt(i))){
i++;
continue;
}
if(!Character.isLetterOrDigit(s.charAt(j))){
j--;
continue;
}
if(Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j)))return false;
else{
i++;
j--;
}
}
return true;
}
No comments:
Post a Comment
With great power comes great responsibility