
题目:给定一个字符串 s ,验证 s 是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。
本题中,将空字符串定义为有效的 回文串 。
回文串:“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。
我使用了双指针的方法,一个指针从前往后,一个指针从后往前,若不是数字或字母则跳过,如果两个指针指向的字符相同,则同时移动再判断它们指向的下一个字符是否相同;这样一直移动直到两个指针相遇,因为忽略字母的大小写所以需要将字母都转换成小写。
这里需要用到两个方法:
1.java.lang.Character.isLetterOrDigit(int codePoint) 确定指定字符(Unicode代码点)是一个字母或数字。如果字符是字母或数字此方法返回true,否则为false。
2.Character.toLowerCase()将字符转换成小写
代码:
public boolean isPalindrome(String s) {
int left = 0;
int right = s.length() - 1;
while (left <= right) {
if (!Character.isLetterOrDigit(s.charAt(left))) {
left += 1;
} else if (!Character.isLetterOrDigit(s.charAt(right))) {
right -= 1;
} else {
char char1 = Character.toLowerCase(s.charAt(left++));
char char2 = Character.toLowerCase(s.charAt(right--));
if (char1 != char2) {
return false;
}
}
}
return true;
}