题目:
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.
Note:
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.
分析:class Solution {
public boolean isPalindrome(String s) {
//回文是指顺着读和反着读是一样的
//根据对称性直接判断
char [] ch=s.toCharArray();
//i代表从头开始,j代表从尾开始
for(int i=0,j=ch.length-1;i<j;){
if(!Character.isLetterOrDigit(ch[i])){
//若果i不是字母或者数字,往后继续
i++;
}else if(!Character.isLetterOrDigit(ch[j])){
j--;
}else if(Character.toLowerCase(ch[i++])!=Character.toLowerCase(ch[j--])){
//不对称
return false;
}
}
return true;
}
}
参考答案:
class Solution {
public boolean isPalindrome(String s) {
if(s.equals(""))
return true;
int length = s.length();
int j = 0;
int k = length-1;
while(j < k){
int a = s.charAt(j);
int b = s.charAt(k);
if((a<65||a>90)&&(a<97||a>122)&&(a<48||a>57)) {
j++;
continue;
}
if((b<65||b>90)&&(b<97||b>122)&&(b<48||b>57)) {
k--;
continue;
}
if(a!=b){
if(a>=65&&a<=90){
return (a-'A')==(b-'a');
}
if(a>=97&&a<=122){
return (a-'a')==(b-'A');
}
return false;
}
j++;
k--;
}
return true;
}
}