题目:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
源码:
class Solution {
public boolean isPalindrome(String s) {
if (s.length() <= 1) {
return true;
}
char[] array = s.toCharArray();
int left = 0;
int right = array.length - 1;
// 对字符串中的字符进行筛选
// 只有数字和字母参与比较
// 要将字母的大小写统一起来,便于进行比较
// 空格为有效回文串
while (left < right) {
// 调整空格
if ((int)array[left] == 32) {
left++;
}
if ((int)array[right] == 32) {
right--;
}
//调整大小写
if (array[left] - 'A' >= 0 && array[left] - 'Z' <= 0) {
array[left] = (char)((int)array[left] + 32);
}
if (array[right] - 'A' >= 0 && array[right] - 'Z' <= 0) {
array[right] = (char)((int)array[right] + 32);
}
//判断字符是否为字母或者数字
boolean flag1 = (array[left] >= '0' && array[left] <= '9')
|| (array[left] >= 'a' && array[left] <= 'z');
boolean flag2 = (array[right] >= '0' && array[right] <='9')
|| (array[right] >= 'a' && array[right] <= 'z');
// 开始进行比较
if (flag1 && flag2 && array[left] != array[right]) {
return false;
} else if (!flag1) {
left++;
} else if (!flag2) {
right--;
} else {
left++;
right--;
}
}
return true;
}
}
来源:CSDN
作者:qq_45239139
链接:https://blog.csdn.net/qq_45239139/article/details/103463681