问题描述:给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:
本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
//算法思路:对撞指针。只不过要注意遇到不是字母或者数字的字符要跳过,字符之间的比较是忽略大小写的
class Solution {
public boolean isPalindrome(String s) {
if(s.length()<=0){
return true;
}
char[] arr = s.toCharArray();
int i = 0;
int j = arr.length-1;
while(i<=j){
// 注意遇到不是字母或者数字的字符要跳过
if(!(Character.isDigit(arr[i]) || Character.isLetter(arr[i]))){
i++;
continue;
}
if(!(Character.isDigit(arr[j]) || Character.isLetter(arr[j]))){
j--;
continue;
}
//判断
if(isEqualChar(arr[i],arr[j])){
i++;
j--;
}else{
return false;
}
}
return true;
}
//判断这两个字符是否相等(忽略大小写)
private boolean isEqualChar(char c1,char c2){
if(c1!=c2){
if(Character.isLetter(c1) && Character.isLetter(c2) && Math.abs(c1-c2)!=32){
return false;
}else if(Character.isLetter(c1) && Character.isDigit(c2)){
return false;
}else if(Character.isDigit(c1) && Character.isLetter(c2)){
return false;
}else if(Character.isDigit(c1) && Character.isDigit(c2)){
return false;
}
}
return true;
}
}
//时间复杂度:O(n)
//空间复杂度:O(1)
参考:
标签:字符,验证,字母,示例,大小写,回文 From: https://www.cnblogs.com/i9code/p/18005394