题目描述
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
输入: “race a car”
输出: false
思路及解答
/*
思路:
定义两个指针left和right,left指向第一个字符,right指向最后一个字符
比较指针left和right所指向的字符是否相等
如果遇到非字母或者数字的字符则跳过
如果遇到大写字母则转化为小写字母
*/
class Solution {
public boolean isPalindrome(String s) {
if(s == null || s.length() == 0)
return true;
//先全部转换为小写,并且去掉两端的空格
s = s.toLowerCase().trim();
//定义左右指针
int left = 0;
int right = s.length()-1;
while(left < right){
while(!isValid(s.charAt(left)) && (left < right))
left++;
while(!isValid(s.charAt(right)) && (left < right))
right--;
if(s.charAt(left) != s.charAt(right))
return false;
if(s.charAt(left) == s.charAt(right)){
left++;
right--;
}
}
return true;
}
//验证这个字符是否为有效字符
public boolean isValid(char c){
if((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z'))
return true;
return false;
}
}