1、题目
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
输入: “race a car”
输出: false
2、解题思路
(1)解决方案:
先转化成一个全部小写的数组;然后使用对撞指针;轮流走(每次指针走到下一个是字母或者数字的下标位置;)然后比较两个指针的值是否相等;不相等的话直接返回false;一直到最后如果还想等则是回文串;
3、java代码
class Solution {
public boolean isPalindrome(String s) {
//判空
if (s==null ||s.length()==0) return true;
//转化成数组,然后定义左右指针
char[] nums=s.toLowerCase().toCharArray();
int left=0;
int right=nums.length-1;
//遍历循环左右指针,对比左右指针是否一致,不一致返回false,直到遍历循环结束
while(left<right){
//如果当前值不是数字或字母,则接着再走一步
while(!Character.isLetterOrDigit(nums[left])&&left<right){
left++;
}
while(!Character.isLetterOrDigit(nums[right])&&left<right){
right--;
}
if(nums[left]!=nums[right]){return false;}
//判断刚走完的一步之后开始走下一步,继续遍历
left++;
right--;
}
return true;
}
}