题目
见125. 验证回文串
解题思路
一看到回文子串,就用双指针来做。最开始我是用的最长回文子串的思路来做的。
后面写完发现不对。
最长回文子串是从从中心开始向两端扩散。而本题是求整个字符串是否为回文,如果用中心扩散,就算考虑了奇偶两种case,也会出现漏掉的情况,例如,对于 “abca”,代码会错过中间的 b 和 c 不匹配的情况。
所以要用双指针从头和尾部分别向中间靠近,来判断是否为回文。
最重要的是要知道函数:
Character.isLetterOrDigit(char ch) 方法来检查一个字符是否是字母或数字。
该方法返回 true 如果字符是字母或数字,否则返回 false。
代码
java">class Solution {public boolean isPalindrome(String s) {int n = s.length();int left = 0, right = n - 1;while (left < right) {while (left < right && !Character.isLetterOrDigit(s.charAt(left))) {++left;}while (left < right && !Character.isLetterOrDigit(s.charAt(right))) {--right;}if (left < right) {if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))) {return false;}++left;--right;}}return true;}
}