题目:给定一个字符串,判断是不是回文,只考虑字母数字字符,不考虑大小写。另外,空串被认为是有效的回文。
分析:保留左右两个指针,每一轮先移动左指针获取一个字母或数字,其它字符都跳过;然后移动右指针,找到一个字母或数字,其它字符都跳过;如果此时左右两个字符都为字母或数字并但是两个不相等,则返回false;进行下轮指针移动直到两个指针相等。
时间复杂度:O(n)
空间复杂度:O(1)
class Solution {
public static boolean isPalindrome(String s) {
String str = s.toLowerCase();
int len = str.length();
int left = 0, right = len - 1;
while(left < right){
while(!Character.isLetterOrDigit(str.charAt(left)) && left < right){
left++;
}
while(!Character.isLetterOrDigit(str.charAt(right)) && left < right){
right--;
}
if(str.charAt(left) == str.charAt(right)){
left++;
right--;
}else{
return false;
}
}
return true;
}
public static void main(String[] args) {
String str = "0p";
System.out.println(isPalindrome(str));
}
}