验证一个字符串是否是回文字符串。
Famous examples include "Amore, Roma", "A man, a plan, a canal: Panama" and "No 'x' in 'Nixon'"。
判读一个字符串是否是回文,一种方法可以将字符串倒置然后和原字符串进行比较。这里采用一种类似字符串翻转的方法,通过从前后两个方向来比较判断是否是回文。本题中的有效字符是字母和数字,并且忽略字母大小写,若不是字符或者数字直接跳过,若为大写字母则变为小写后再判断是否相同。
public class Solution {
public boolean isPalindrome(String s) {
if(s == null)
return false;
char[] ch=s.toCharArray();
int left=0;
int right=ch.length-1;
while(left<right)
{
while(left<right&&isAlphaNum(ch[left]) == false)
left++;
while(left<right&&isAlphaNum(ch[right]) == false)
right--;
if(left<right)
{
if(ch[left]>='A'&&ch[left]<='Z')
ch[left]=(char)(ch[left]-'A'+'a');
if(ch[right]>='A'&&ch[right]<='Z')
ch[right]=(char)(ch[right]-'A'+'a');
if(ch[left] == ch[right])
{
left++;
right--;
}else
{
return false;
}
}
}
return true;
}
public boolean isAlphaNum(char c)
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z'||c>='0'&&c<='9')
return true;
else
return false;
}
}