版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/love905661433/article/details/84930836
题目
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
**说明:**本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
解题
- 典型的双指针问题, 代码如下:
class Solution {
public boolean isPalindrome(String s) {
if (null == s || "".equals(s)) {
return true;
}
char[] chars = s.toLowerCase().toCharArray();
int left = 0, right = chars.length - 1;
// left == right的情况, 表示除了最中间的一个字符之外, 其他的满足回文串情况
while(left<right){
if (!isNumOrChar(chars[left])) {
left++;
continue;
}
if (!isNumOrChar(chars[right])) {
right--;
continue;
}
if (chars[left] == chars[right]) {
left++;
right--;
} else {
return false;
}
}
return true;
}
// 判断字符串是否为数字和字母
private boolean isNumOrChar(char c){
if(c >= '0' && c <= '9'){
return true;
}
if(c >= 'a' && c <= 'z'){
return true;
}
return false;
}
}