题目:
给定一个字符串,判断它是否是回文,只考虑字母数字字符而忽略大小写。
注意:为了解决这个问题,我们将空字符串定义为有效的回文。
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.
Input: "A man, a plan, a canal: Panama" Output: true Input: "race a car" Output: false
方法:
从字符串的两端开始遍历,如果是标点符号,则略过,只对字母和数字进行比较
代码:
public boolean isPalindrome(String s) {
if(s=="" || s==null || s.length()==1) {
return true;
}
int start = 0;
int end = s.length()-1;
s = s.toLowerCase();
while(start<end) {
// 寻找左端的字符和数字
while(start<end && ((s.charAt(start)<'a' || s.charAt(start)>'z') && (s.charAt(start)<'0' || s.charAt(start)>'9'))) {
tart++;
}
// 寻找右端的字符和数字
while(start<end && ((s.charAt(end)<'a' || s.charAt(end)>'z') && (s.charAt(end)<'0' || s.charAt(end)>'9'))) {
end--;
}
// 比较当前(对称)位置
if(s.charAt(start)!=s.charAt(end)) {
return false;
}
start++;
end--;
}
return true;
}