讲真,这道简单难度的题没什么好说的,直接上代码
class Solution {
//第一次写的
public boolean f1(String s){
char[] clist = new char[s.length()];
int index = 0;
char c;
for(int i=0;i<s.length();i++){
c = s.charAt(i);
if(c>='a'&&c<='z')clist[index++]=c;
else if(c>='A'&&c<='Z')clist[index++]=(char)('a'+c-'A');
else if(c>='0'&&c<='9')clist[index++]=c;
}
int i=0,j=index-1;
while(i<j){
if(clist[i]!=clist[j])return false;
i++;j--;
}
return true;
}
//第二次写的,将第一次的东西替换成了对应的api
public boolean f2(String s){
StringBuffer ss = new StringBuffer();
int length = s.length();
char c;
for(int i=0;i<length;i++){
c = s.charAt(i);
if(Character.isDigit(c)||Character.isLowerCase(c))ss.append(c);
else if(Character.isUpperCase(c))ss.append(Character.toLowerCase(c));
}
int i=0,j=ss.length()-1;
while(i<j){
if(ss.charAt(i)!=ss.charAt(j))return false;
i++;j--;
}
return true;
}
//第三次,不开辅助数组。
public boolean f3(String s){
int i=0,j=s.length()-1;
while(i<j){
//获取下一个i;
while(i<j&&!Character.isLetterOrDigit(s.charAt(i)))i++;
//获取下一个j;
while(i<j&&!Character.isLetterOrDigit(s.charAt(j)))j--;
if(Character.toLowerCase(s.charAt(i))!=Character.toLowerCase(s.charAt(j)))return false;
i++;j--;
}
return true;
}
public boolean isPalindrome(String s) {
return f1(s);
return f2(s);
return f3(s);
}
}
这道题让我发现了我一个弱点,因为我是半路出家用的java,所以很多java带的API都不是很清楚,尤其这里的一些字符串。字符处理的相关方法,这是我的弱项,需要补