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.
问题描述:给定一个字符串,判断该字符串是否是回文,只考虑数字和字母并且忽略大小写。
注:考虑字符串是否为空,这里空字符串也为回文字符串。
分析:首先将字符串中的符号去掉,包括.,空格等符号去掉,即把字符串中不是字母数字的去掉,用replaceAll函数即可。对去掉符号的字符串判断是否为空,若为空直接返回true,然后循环遍历字符串,判断是否是回文。
判断字符串是否是回文的思路是:先将字符串统一转成小写(或大写),然后判断第1个字符和最后1个字符是否相等,若不等,则不是回文串,若相等,则递归的判断由第2个字符~倒数第2个字符构成的串是否是回文串……变量i记录第i个字符,变量j记录倒数第j个字符,直到i<=j不成立时结束循环。判断回文过程中变量flag记录,若不是回文,flag=false,退出循环。最后返回flag。
public class Solution {
public boolean isPalindrome(String s) {
String s1 = s.replaceAll("[\\pP\\pS\\pZ]","");
// String s1 = s.replaceAll("[^a-zA-Z0-9]","");
if( s1.length() == 0 )
return true;
boolean flag = true;
for(int i=0,j=s1.length()-1;i<=j;i++,j--){
char c1 = Character.toLowerCase(s1.charAt(i));
char c2 = Character.toLowerCase(s1.charAt(j));
if(c1 != c2){
flag = false;
break;
}
}
return flag;
}
}