题目传送门:点击此处
思路
- 先不考虑字符的有效,如果只是判断是不是回文就很好判断,两个指针,一个指向头,一个指向尾,遍历到中间结束
- 现在有特殊字符,那么就要考虑一下坐标要怎么变的问题了,思路跟原来的一样,也是两个指针,一个头,一个尾,怎么变是需要思考的
- 在移动的时候,判断当前的字符是不是有效的
- 比对字符串的时候要考虑是数字还是字母,它们的比对方式不一样
代码
class Solution {
public boolean isPalindrome(String s) {
int i = 0;
int j = s.length() - 1;
while (i <= j) {
char chari = s.charAt(i);
char charj = s.charAt(j);
if (!validChar(chari)) {
i++;
} else if (!validChar(charj)) {
j--;
} else {
if (j < i) return false;
if (!equalChar(chari, charj)) return false;
i++;
j--;
}
}
return true;
}
private static boolean validChar(char c) {
if ((c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122)) return true;
return false;
}
private static boolean equalChar(char c1, char c2) {
if ((c1 >= 48 && c1 <= 57) || (c2 >= 48 && c2 <= 57)) return c1 == c2 ? true : false;
if (c1 == c2) return true;
else if (c1 + 32 == c2) return true;
else if (c1 == c2 + 32) return true;
else return false;
}
}