A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers.
Given a string s, return true if it is a palindrome, or false otherwise.
Example 1:
Input: s = "A man, a plan, a canal: Panama"
Output: true
Explanation: "amanaplanacanalpanama" is a palindrome.
Example 2:
Input: s = "race a car"
Output: false
Explanation: "raceacar" is not a palindrome.
Example 3:
Input: s = " "
Output: true
Explanation: s is an empty string "" after removing non-alphanumeric characters.
Since an empty string reads the same forward and backward, it is a palindrome.
Constraints:
- 1 <= s.length <= 2 * 105
- s consists only of printable ASCII characters.
class Solution {
public boolean isPalindrome(String s) {
if(s==null||s.isEmpty()){
return true;
}
int i = 0;
int j = s.length()-1;
while(i<=j){
while(i<j&&!isNumAlphanumeric(s.charAt(i))){
i++;
}
while((i<j)&&(!isNumAlphanumeric(s.charAt(j)))) {
j--;
}
if (toLower(s.charAt(i++)) != toLower(s.charAt(j--))) {
return false;
}
}
return true;
}
public char toLower(char c){
if('A'<=c&&c<='Z'){
return (char)('a'+c-'A');
}
return c;
}
public boolean isNumAlphanumeric(char c){
if(('0'<=c&&c<='9')||('a'<=c&&c<='z')||('A'<=c&&c<='Z')) {
return true;
}
return false;
}
}
- 双向遍历
- 考查大小写转换