问题描述
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
代码实现
class Solution {
public boolean isPalindrome(String s) {
// 定义开头结尾指针
int left = 0;
int right = s.length() - 1;
// 只要两指针没相遇就继续
while (left < right) {
// 遇到空格和标点符号直接跳过
// 这里需要额外再加 left < right 条件,防止全是标点符号导致越界
while (left < right && !Character.isLetterOrDigit(s.charAt(left))) {
left++;
}
while (left < right && !Character.isLetterOrDigit(s.charAt(right))) {
right--;
}
// 统一将大写转换成小写
if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))) {
return false;
}
left++;
right--;
}
return true;
}
}
核心 API 说明
- Character.isLetterOrDigit(char ch): 判断字符是否为字母或数字。
- Character.toLowerCase(char ch): 大写变小写,已经是小写或者数字的原样返回。


