一、题目详情
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明: 本题中,我们将空字符串定义为有效的回文串。
示例:
输入: "A man, a plan, a canal: Panama"
输出: true
二、思路
对于字符串 s,首先我们将它处理一下,剔除其他字符,只保留字母和数字字符,得到字符串 str。
接下来,我们有两种解法:
- 将 str 进行反转,再看它与 str 是否相等,相等就是回文串。
- 定义两个指针,分别指向字符串 str 的开头和结尾,依次比较字符。如果有一对字符不匹配,那么就不是回文串。 这里我们采用第二种解法。
三、代码
public boolean isPalindrome2(String s) {
//获取所有的数字和字母字符
StringBuilder sb=new StringBuilder();
for(int i=0;i<s.length();i++) {
if(Character.isLetterOrDigit(s.charAt(i))) {
//将字母字符转化为小写加入sb中
sb.append(Character.toLowerCase(s.charAt(i)));
}
}
int left=0,right=sb.length()-1;
while(left<right) {
//如果左右俩字符比较不一致,直接false
if(sb.charAt(left)!=sb.charAt(right)) {
return false;
}
//如果一致就继续比较
left++;
right--;
}
//之前比较的左右字符都相同,全部都比较完了
return true;
}