解题思路
首先,回文是我们可以从头到尾和从尾到头读一个字符串,得到的内容都相等。
故我们可以使用双指针,指针相对而行来扫描字符串的字符,判断字符是否相等,如果两指针相遇且没有遇到不相等的数,那么这个字符串是回文。
需要注意的地方: 题目只考虑字母和数字,我们在移动双指针时,需要跳过非字母和数字的字符。
代码
class Solution {
public boolean isPalindrome(String s) {
boolean isPalindrome = true;
int start = 0;
int end = s.length() - 1;
while(start < end) {
char ch1 = s.charAt(start);
char ch2 = s.charAt(end);
if(!Character.isLetterOrDigit(ch1)) {
start++;
} else if (!Character.isLetterOrDigit(ch2)) {
end--;
} else {
ch1 = Character.toLowerCase(ch1);
ch2 = Character.toLowerCase(ch2);
if(ch1 != ch2) {
return false;
}
start++;
end--;
}
}
return isPalindrome;
}
}
总结
求有效的回文。在回文的特性后,我们可以用双指针的解题思路,判断字符串是否是回文。即以相对的方向,移动双指针,