原题网址:https://leetcode.com/problems/valid-palindrome/
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.
Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.
For the purpose of this problem, we define empty string as valid palindrome.
方法一:边推进便比较。
public class Solution {
private boolean isAlphanumeric(char ch) {
if ((ch>='a' && ch<='z') || (ch>='A' && ch<='Z') || (ch>='0' && ch<='9')) return true;
return false;
}
public boolean isPalindrome(String s) {
if (null == s || "".equals(s)) return true;
int i=0, j=s.length()-1;
while (i<j) {
char ic = Character.toLowerCase(s.charAt(i));
if (!isAlphanumeric(ic)) {
i++;
continue;
}
char jc = Character.toLowerCase(s.charAt(j));
if (!isAlphanumeric(jc)) {
j--;
continue;
}
if (ic != jc) return false;
i++;
j--;
}
return true;
}
}
方法二:先推进再比较。
public class Solution {
public boolean isPalindrome(String s) {
if (s==null) return true;
char[] sa = s.toCharArray();
int len = 0;
for(int i=0; i<sa.length; i++) {
if (sa[i] >= 'A' && sa[i] <= 'Z') sa[len++] = (char)('a' + sa[i] - 'A');
else if ((sa[i] >='a' && sa[i] <='z') || (sa[i] >= '0' && sa[i] <= '9')) sa[len++] = sa[i];
}
for(int i=0, j=len-1; i<j; i++, j--) {
if (sa[i] != sa[j]) return false;
}
return true;
}
}