一、题目描述
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
**说明:**本题中,我们将空字符串定义为有效的回文串。
二、解题思路
首先理解一下什么是回文串,回文串是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。那我们可以看出,对于一个回文串,将它从中间分割,第一个字符和最后一个字符相等,第二个字符和倒数第二个字符相等,以此类推。
依然可以和我的81_反转字符串
一样,使用对撞指针。
注意一个特殊情况,含有空字符的字符串:
对于这种含有空字符或不是数字和字母的字符串,遍历的时候直接跳过,left依旧向后遍历移动到是字母或者数字的位置:
遇到“[”和“:”这种非字母和数字的字符,依旧跳过:
终止条件left>=right
三、代码演示
class Solution {
public boolean isPalindrome(String s){
int left = 0, right = s.length()-1;
while(left<right){
//Character.isLetterOrDigit()方法用于判断字符是不是字母或者数字
while (left<right && !Character.isLetterOrDigit(s.charAt(left))){
left++;
}
while (left<right && !Character.isLetterOrDigit(s.charAt(right))){
right--;
}
//判断两个字符是否相等
if (left<right){
if (Character.toLowerCase(s.charAt(left))!=Character.toLowerCase(s.charAt(right))){
return false;
}
left++;
right--;
}
}
return true;
}
}