题目:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
代码如下:
class Solution {
public boolean isPalindrome(String s) {
int left = 0,right = s.length()-1;
while(left<right){
while (left < right && !Character.isLetterOrDigit(s.charAt(left)))
left++;
while (left < right && !Character.isLetterOrDigit(s.charAt(right)))
right--;
if(Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right)))
return false;
left++;
right--;
}
return true;
}
}
解读:
这里使用的是双指针方法,也可以使用正则或者递归方法
1. 使用双指针,那么需要定义两个指针分别在头和尾。
2. 题意中,只考虑数字及字母,那么需要忽略特殊字符,这里使用到了java.lang.Character.isLetterOrDigit(char ch)
字符被确定是字母或数字,如果不是isLetter(code Point)
也不是 isDigit(code Point)
的字符,则返回true。
3. 指定指针所在的字符使用String.charAt()
方法
charAt()
方法用于返回指定索引处的字符0。
4. 题意中,忽略大小写,在比较时需要都转成小写或大写,使用java.lang.Character.toLowerCase()
转成小写,使用java.lang.Character.toUpperCase()
转成大写一样的效果
toLowerCase() 方法用于将大写字符转换为小写。
toUpperCase() 方法用于将小写字符转换为大写。