给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
思路:
* 先处理字符串s,得到只包含大小写字母,以及数字
* 转换为统一的大小写字母
* 循环首尾比较,判断是否相等
代码:
public boolean isPalindrome(String s) {
if(s.equals(""))return true;//注意题干提示,""算是回文串
char[] str = s.toCharArray();
s = "";//清空s,为接下来存储
//筛选出大小写字母,以及数字
for (int i = 0; i < str.length; i++) {
if((str[i]>='a' && str[i]<='z')||(str[i]>='A' && str[i]<='Z') || (str[i]>='0' && str[i]<='9')) {
s+=String.valueOf(str[i]);
}
}
s = s.toLowerCase();//转换成小写,也可以转换成大写,用于比较
char[] c = s.toCharArray();
for(int i=0,j=c.length-1;i<c.length && j>=0;i++,j--) {
if(c[i]!=c[j])return false;//首尾比较,不等就返回false
}
return true;
}
测试数据:
System.out.println(isPalindrome("A man, a plan, a canal: Panama"));//true
System.out.println(isPalindrome("race a car"));//false
System.out.println(isPalindrome(""));//true
System.out.println(isPalindrome("0P"));//false