LeetCode-125. 验证回文串
题目来源
题目详情
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明: 本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
解释: "amanaplanacanalpanama" 是回文串
示例 2:
输入: "race a car"
输出: false
解释: "raceacar" 不是回文串
提示:
1 <= s.length <= 2 * 105
- 字符串
s
由 ASCII 字符组成
题解分析
解法一:双指针法
- 本题是需要判断回文串,一看到回文,我们就应该联想到双指针法,因为回文的特点就是头尾字符对应的,也因此可以考虑使用首尾指针来求解。
- 但是,本题有一个特点就是,这里并不是所有字符都是有效的,有一些字符是不必要考虑的,所以,在遍历的过程中,需要跳过这些不合法的字符,而只比较合法的字符。
class Solution {
public boolean isPalindrome(String s) {
s = s.trim();
int n = s.length();
s = s.toLowerCase();
int left = 0, right = n-1;
while(left <= right){
char chl = s.charAt(left);
char chr = s.charAt(right);
if(Character.isLetterOrDigit(chl) && Character.isLetterOrDigit(chr)){
if(chl != chr){
return false;
}
left++;
right--;
}
if(!Character.isLetterOrDigit(chl)){
left++;
}
if(!Character.isLetterOrDigit(chr)){
right--;
}
}
return true;
}
}
Either Excellent or Rusty