Valid Palindrome
Question:
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,
“A man, a plan, a canal: Panama” is a palindrome.
“race a car” is not a palindrome.
Example Questions Candidate Might Ask:
Q: What about an empty string? Is it a valid palindrome?
A: For the purpose of this problem, we define empty string as valid palindrome.
*Difficulty: Easy, Frequency: Medium
My Solution 1: time O(n), spaceO(n)
public boolean isPalindrome(String s){
s = s.replaceAll("[^A-Za-z0-9]","").toLowerCase();
if(s.isEmpty()) return true;
char[] sAry = s.toCharArray();
if(sAry.length == 1) return true;
for(int i = 0; i < sAry.length/2; i++){
if(sAry[i] != sAry[sAry.length-1-i]) return false;
}
return true;
}
My Solution 2: O(n), Space(1)
public boolean isPalindrome2(String s){
int i = 0, j = s.length()-1;
if(s.isEmpty()) return true;
// char[] sAry = s.toCharArray();
while(i < j ){
while(i < j && !Character.isLetterOrDigit(s.charAt(i)) ) i++;
while(i < j && !Character.isLetterOrDigit(s.charAt(j)) ) j--;
if(Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j))) return false;
i++; j--;
}
return true;
}
*if use charAry faster, but need more space.
should be careful about the array out of bound cases.