思路1:
先处理字符串,只剩数字和字母,然后将字母全处理为小写,之后开始头尾相比较,有不同就return false,一直找不到出来以后,返回true
class Solution {
public boolean isPalindrome(String s) {
String reg="[^a-zA-Z0-9]";
s=s.replaceAll(reg,"").toLowerCase();
if(s.equals("")){
return true;
}
for(int i=0;i<s.length();i++){
if(s.charAt(i)!=s.charAt(s.length()-1-i)){
return false;
}
}
return true;
}
}
思路2:
不用先处理字符串,从左和从右同时找,找到字母或者数字就找一下然后比较,一直到两个指针相遇。
但是发现,似乎用正则表达式匹配,效率较低,如果按照字符ack码找,效率会高很多。
int left =0;
int right=s.length()-1;
String regex="[a-zA-Z0-9]";
while(left<right){
char lchar=' ';
while(left<right){
lchar=s.charAt(left);
String l=String.valueOf(lchar);
if(l.matches(regex)){
break;
}else{
left++;
}
}
char rchar=' ';
while(left<right){
rchar=s.charAt(right);
String r=String.valueOf(rchar);
if(r.matches(regex)){
break;
}else{
right--;
}
}
if(left<right){
if(lchar>='A' && lchar<='Z'){
lchar=(char)(lchar-('A'-'a'));
}
if(rchar>='A' && rchar<='Z'){
rchar=(char)(rchar-('A'-'a'));
}
if(lchar!=rchar){
return false;
}
left++;
right--;
}
}
return true;