LeetCode 125. Valid Palindrome验证回文串(Java)
题目:
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
Note: For the purpose of this problem, we define empty string as valid palindrome.
Example 1: Input: “A man, a plan, a canal: Panama” Output: true
Example 2: Input: “race a car” Output: false
解答:
思路:
- 运用双指针i,j,分别记录左和右,对有效数字或字符进行依次比较。每次比较时,先判断是否为有限字符,再判断是否相等。
- 用isNumOrLetter(char s)方法判断该字符是否为数字字符或者为字母
- 用isSame(char left,char right)判断左右指针两个有效字符是否相等。
class Solution {
public boolean isPalindrome(String s) {
if(s==null||s.length()==1){
return true;
}
int i=0;
int j=s.length()-1;
while(i<j){
while(i<j&&!isNumOrLetter(s.charAt(i))){
i++;
}
while(i<j&&!isNumOrLetter(s.charAt(j))){
j--;
}
if(i<j&&!isSame(s.charAt(i),s.charAt(j))){
return false;
}
i++;
j--;
}
return true;
}
//根据ASCII码,判断是否为数字或者字母
private boolean isNumOrLetter(char s){
if((s>=A&&s<=Z)||(s>=a&&s<=z)||(s>=0&&s<=9)){
return true;
}else{
return false;
}
}
//判断两个有效字符是否相等
private boolean isSame(char left,char right){
//判断数字是否相等
if((left>=0&&left<=9)||(right>=0&&right<=9)){
if(left==right){
return true;
}
//判断字母字符是否相等,其中大小写字母对应ASCII码差32
}else if(left==right||Math.abs(left-right)==32){
return true;
}
return false;
}
}
