题目描述:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama" 输出: true
示例 2:
输入: "race a car" 输出: false
解题思路:
简单来说又是使用双指针法。代码中的judge(char c)函数用于判断一个字符是不是字母或者数字的。由于题目要求忽略大小写,所以一开始先把字符串变成大写的了,用String类的toUpperCase()函数。
第一步:
双指针分别指向头和尾,判断之后找到第一组是字母或者数字的字符,
第二步:
比较一下这两个字符,如果相等就继续找下一组比较,如果不相等就说明不是回文字符串,直接返回false就好了
代码实现(Java语言):
class Solution {
public boolean isPalindrome(String s) {
if(s.length() == 0 || s==null){
return true;
}
int i = 0,j = s.length() - 1;
String str = s.toUpperCase();
System.out.println(str);
while(i < j){
while(i<j && !judge(str.charAt(i)))
i++;
while(i<j && !judge(str.charAt(j)))
j--;
System.out.println(i + ":" + str.charAt(i) + "------" + j + ":" + str.charAt(j));
if(str.charAt(i) != str.charAt(j))
return false;
else{
i++;
j--;
}
}
return true;
}
public boolean judge(char c){
return (('A'<=c &&'Z'>=c) || (c>='0'&&c<='9'))?true:false;
}
}