给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
分析:这里有三个要点,一是将字符串中除了字符和数字以外的字符都替换掉,二是比较时需要忽略字母的大小写,这里可以处理成将字符串全部转换成大写或者小写。三是需要使用两个指针(分别指向字符串的开头和结尾(i,length-i-1))
代码:
class Solution {
public boolean isPalindrome(String s) {
char[] str = s.toLowerCase().replaceAll("[^0-9a-zA-Z]","").toCharArray(); //toLowerCase()表示将字符串中的字母都转换成小写字母、replaceAll("[^0-9a-zA-Z]","")表示将字符串中除了字母和数字以外的之后都变成空串、最后转成字符数组
int length = str.length;
for (int i = 0;i<length/2;i++) { //设置两个指针,分别指向字符串的开始和结尾进行比较
if (str[i] != str[length-i-1]) {
return false; //发现不同返回false
}
}
return true; //比较结束依旧没有不同,返回true
}
}