描述
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
示例 2
输入: “race a car”
输出: false
代码
class Solution {
public boolean isPalindrome(String s) {
if (isEmpty(s)) {
return true;
}
// 数据清洗
StringBuffer sb = new StringBuffer();
for (char c : s.toCharArray()) {
sb.append(cleanData(c));
}
s = sb.toString();
if (isEmpty(s)) {
return true;
}
// 双指针
int head = 0;
int tail = s.length() - 1;
int mid = (head + tail) / 2;
while (head <= mid) {
if (s.charAt(head++) != s.charAt(tail--)) {
return false;
}
}
return true;
}
public String cleanData(char c) {
//数字 & 小写字母
if (('0' <= c && c <= '9') || ('a' <= c && c <= 'z')) {
return String.valueOf(c);
}
//大写字母
if ('A' <= c && c <= 'Z') {
return String.valueOf((char) (c + ('a' - 'A')));
}
// 非法字符
return "";
}
public boolean isEmpty(String s){
return s == null || s.length() == 0;
}
}