双指针法
class Solution {
public boolean isPalindrome(String s) {
/**
* 双指针遍历
* 定义一个判断字符是否为字母的方法
*/
int left = 0;
int right = s.length() - 1;
s = s.toLowerCase();
while (left < right){
if (! judge(s.charAt(left))){
left++;
}
else if (! judge(s.charAt(right))){
right--;
}
else {
if (s.charAt(left) == s.charAt(right)){
left++;
right--;
}
else {
return false;
}
}
}
return true;
}
public boolean judge(char c){
if (c - 'a' >= 0 && c - 'a' <= 25 || c - '0' >=0 && c - '0' <= 9){
return true;
}
return false;
}
}
/**
* 时间复杂度 O(s)
* 空间复杂度 O(1)
*/
优化1——使用字符类的判断方法
class Solution {
public boolean isPalindrome(String s) {
/**
* 双指针遍历
*/
int left = 0;
int right = s.length() - 1;
s = s.toLowerCase();
while (left < right){
if (! Character.isLetterOrDigit(s.charAt(left))){
left++;
}
else if (! Character.isLetterOrDigit(s.charAt(right))){
right--;
}
else {
if (s.charAt(left) == s.charAt(right)){
left++;
right--;
}
else {
return false;
}
}
}
return true;
}
}
/**
* 时间复杂度 O(s)
* 空间复杂度 O(1)
*/
https://leetcode-cn.com/problems/valid-palindrome/