判断字符串是否为回文串
题目:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
思路:
字符串转为小写字符串从字符串开始和结尾两端开始过滤字符判断是否为不相等,如果不相等返回false,如果相等则left ++ right--继续判断
如果离开了索引字符过滤时发现不为字母或数字则留++取下一个索引值,右侧同理。
public static boolean isPalindrome2(String s) {
if(s.equals("") || s == null) {
return true;
}
//将字符串转为小写
s = s.toLowerCase();
int left = 0;
int right = s.length() - 1;
while(left < right) {
//过滤字符
if((s.charAt(left) >='a' && s.charAt(left) <= 'z' ||
s.charAt(left) >= '0' && s.charAt(left) <= '9')
&&
(s.charAt(right) >='a' && s.charAt(right) <= 'z' ||
s.charAt(right) >= '0' && s.charAt(right) <= '9')
) {
if(s.charAt(left) != (s.charAt(right))){
return false;
}else {
left ++;
right --;
}
//判断left索引处值是否不为字母或字符,如果是则left++,否则right--
} else if (
s.charAt(left) > 'z' || s.charAt(left) < '0'
|| s.charAt(left) > '9' && s.charAt(left) < 'a') {
left ++;
} else {
right --;
}
}
return true;
}