题目所属分类
双指针算法
原题链接
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
代码案例:输入: s = “A man, a plan, a canal: Panama”
输出:true
解释:“amanaplanacanalpanama” 是回文串。
题解
双指针
i指针从左往右扫,j指针从右往左扫,扫的过程中忽略掉除了字符和数字的字符,当 i位置的字符 和 j位置的字符不可以匹配,则return false,否则继续扫描
class Solution {
public boolean isPalindrome(String s) {
int n = s.length() ;
for(int i = 0 , j = n - 1 ; i < j ; i++ , j --){
while(i < j && !check(s.charAt(i)))i++ ;
while(i < j && !check(s.charAt(j))) j-- ;
if(i < j && Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j))){
return false ;
}
}
return true ;
}
boolean check(char c){
if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9')
return true;
return false;
}
}