给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
解释:"amanaplanacanalpanama" 是回文串
示例 2:
输入: "race a car" 输出: false 解释:"raceacar" 不是回文串
思路:
首先应该明白,最后要判断的是去掉空格,逗号,冒号等特殊字符之后的字符串是不是回文串
这时候,需要用到字符串的一个函数Character.isLetterOrDigit();
使用方法:
如果是字符串或者数字,返回真,其他字符返回假
public static void main(String[] args) {
char[] ch = {',','1','a',' ','~'};
for(int i =0; i < ch.length; i++){
System.out.println(Character.isLetterOrDigit(ch[i]));
}
}
步骤:
1.先将原本字符的特殊字符去掉,生成新的字符串(使用Character.isLetterOrDigit()方法)
2.将生成的字符串全部变为大写或者小写(由题目知道大写A和小写a一样)
3.从后往前依次比较,如果两个字符不相等,则返回false,否则返回true
class Solution {
public boolean isPalindrome(String s) {
StringBuffer stringBuffer = new StringBuffer();
for(int i =0; i < s.length(); i++){
char curChar =s.charAt(i);
// if(Character.isLetterOrDigit(curChar)){
// stringBuffer.append(curChar);
// }else{
// continue;
// }
//将特殊字符去掉,拼接成新的字符串
if(!Character.isLetterOrDigit(curChar)){
continue;
}else{
stringBuffer.append(curChar);
}
}
// System.out.println(stringBuffer);
String stringBuffer1 = stringBuffer.toString().toLowerCase();
int left = 0;
int right = stringBuffer1.length()-1;
while(left < right){
if(stringBuffer1.charAt(left) != stringBuffer1.charAt(right)){
return false;
}else{
left++;
right--;
}
}
return true;
}
}