有效回文
题目:给定一个字符串,请判断它是不是回文,假设只考虑字母和数字字符,并忽略大小写。
思路:使用双指针,一个指向第一个字符,一个指向最后一个字符,相向移动,如果两个指针指向的字符相同,则同时移动这两个指针以判断他们指向的下一个字符是否相同。知道这两个指针相遇。
可能用到的方法:
- Character.isLetter(ch) 判断ch是否为字母
- Character.isDigit(ch) 判断ch是否为数字
- Character.isLetterOrDigit(ch) 判断ch是否为数字或字母
- Character.isLowerCase(ch) 判断ch是否为小写字母
- Character.isUpperCase(ch) 判断ch是否为大写字母
- Character.isWhitepace(ch) 判断ch为否为空格
- Character.toLowerCase(ch) 把ch(字母)转换为小写字母
- Character.toUpperCase(ch) 把ch(字母)转换为大写字母
public boolean isPalindrome(String s){
int i = 0, j = s.length() - 1;
while (i < j){
char ch1 = s.charAt(i);
char ch2 = s.charAt(j);
if (!Character.isLetterOrDigit(ch1)){
i++;
}else if (!Character.isLetterOrDigit(ch2)){
j--;
}else {
ch1 = Character.toLowerCase(ch1);
ch2 = Character.toLowerCase(ch2);
if (ch1 != ch2){
return false;
}
i++;
j--;
}
}
return true;
}