题目:
给定一个字符串
s
,验证s
是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。本题中,将空字符串定义为有效的 回文串 。
这题可以与027. 回文链表相比较
leetcode题目连接:力扣
分析:
使用双指针,一个指向字符串的首位,一个指向末尾,两者不断向中间移动,在移动过程中比较两个指针指向的字符是否相等,不等则返回false
题目中说只考虑字母和数字以及大小写转换,因此涉及到Character的方法,包括考察是否为字母和数字的boolean isLetterOrDigit(char ch)和char toLowerCase(char ch)方法
Java代码实现:
class Solution {
public boolean isPalindrome(String s) {
int left = 0;
int right = s.length() -1;
while(left <= right){
char ch1 = s.charAt(left);
char ch2 = s.charAt(right);
if(!Character.isLetterOrDigit(ch1)){ //判断第一个指针指向的字符是否为数字和字母
left ++;
} else if (!Character.isLetterOrDigit(ch2)){ //判断第一个指针指向的字符是否为数字和字母
right --;
} else { //转换为小写再比较
ch1 = Character.toLowerCase(ch1);
ch2 = Character.toLowerCase(ch2);
if(ch1 != ch2){
return false;
}
left++;
right--;
}
}
return true;
}
}
复杂度分析:
时间复杂度:O(N)
空间复杂度:O(1)
代码执行结果:
以上为个人做题笔记,很多是自己的理解,若有错误还请各位大佬指出~