题目
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
分析
使用双指针的方法遍历整个字符串,判断字符串是否是回文字符串。
几个要点:
1.Character.isLetterOrDigit()
用来判断当前字符是否是字母和数字字符。
2.Character.toLowerCase()
将大写字母转化为小写字母,再进行比较。
代码
class Solution {
public boolean isPalindrome(String s) {
int left=0, right=s.length()-1;
while(left<right){
//判断左指针字符是否是字母或数字
while(left<right&&!Character.isLetterOrDigit(s.charAt(left))){
++left;
}
//判断右指针字符是否是字母或数字
while(left<right&&!Character.isLetterOrDigit(s.charAt(right))){
--right;
}
if(Character.toLowerCase(s.charAt(left))!=Character.toLowerCase(s.charAt(right))){
return false;
}
++left;
--right;
}
return true;
}
}
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(1)