Valid Palindrome
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
Notice
Have you consider that the string might be empty? This is a good question to ask during an interview.
For the purpose of this problem, we define empty string as valid palindrome.
Example
"A man, a plan, a canal: Panama"
is a palindrome.
"race a car"
is not a palindrome.
分析
对撞指针。此题重点如何判断数字和字母。
大while里的小while,小while需要判断边界
答案
public class Solution {
/*
* @param s: A string
* @return: Whether the string is a valid palindrome
*/
public boolean isPalindrome(String s) {
// write your code here
if(s == null)
return false;
int left = 0, right = s.length() - 1;
char[] cs = s.toCharArray();
while(left < right){
while(left < right && !isLetter(cs[left]))
left ++;
while(left < right && !isLetter(cs[right]))
right --;
if(Character.toLowerCase(cs[left ++]) != Character.toLowerCase(cs[right --])){
return false;
}
}
return true;
}
//判断字母和数字
private boolean isLetter(char ch){
return ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9'));
}
}
Last updated
Was this helpful?