题目描述:
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,
“A man, a plan, a canal: Panama” is a palindrome.
“race a car” is not a palindrome.
其实就是判断一个字符串是不是回文字符串,当然,符号不算,而且是只考虑字母数字字符。
思路:
用两个指针,一个指向第一个字符,另外一个指向最后一个字符,两个指针都往中间移动,然后判断两个指向的字符是否是字母数字字符,如果字符不符合,如果是前一个指针则指针指向下一个,如果是后一个指针,则指向前一个个字符。当两个都是字母数字字符后,判断是否相等,如果相等,指针都指向自己的下一个字符。如果不相等,返回false,如果两个指针交叉或者指向的字符相同时,返回true。
代码:
class Solution {
public boolean isPalindrome(String s) {
if(s==null || s.equals("")) return true;
s = s.toLowerCase();
int start = 0;
int end = s.length() - 1;
while(start < end){
if((s.charAt(start) < 'a' || s.charAt(start) > 'z') && (s.charAt(start) < '0' || s.charAt(start) > '9')){
start++;
continue;
}
if((s.charAt(end) < 'a' || s.charAt(end) > 'z') && (s.charAt(end) < '0' || s.charAt(end) > '9')){
end--;
continue;
}
if(s.charAt(start) == s.charAt(end)){
start++;
end--;
}else{
return false;
}
}
return true;
}
}