题目:给定一个字符串,判断字符串是否为回文串(只考虑字符和数字,忽略大小写)
算法:设置两个索引,分别从两端向中间扫描,扫描的时候忽略字符和数字以外的一切。
需要注意的是,空字符串也是回文串,而且因为只考虑字符和数字,所以“*/*-”被视为空字符串,所以被认为是回文串
public class Solution {
/**
* Check if string is palindrome.
* <p>Empty String is palindrome,
* because palindrome only consider alphanumeric characters,
* so any string like "*-+*" is consider to be palindrome.
* @param s
* @return
*/
public boolean isPalindrome(String s) {
if (null == s) {
return false;
}
if (s.equals("")) {
return true;
}
boolean isPalindrome = true;
int iHead = 0;
int iTail = s.length() - 1;
char[] strs = s.toLowerCase().toCharArray();
while (iHead <= iTail) {
while (iHead<strs.length
&& !Character.isLetter(strs[iHead])
&& !Character.isDigit(strs[iHead])) {
++iHead;
}
while (iTail >= 0
&& !Character.isLetter(strs[iTail])
&& !Character.isDigit(strs[iTail])) {
--iTail;
}
if (iHead > iTail) {
break;
} else if (strs[iHead] != strs[iTail]) {
return false;
}
++iHead;
--iTail;
}// end of while
return isPalindrome;
}
}