几天前找工作,面试官问了我一个算法题,我竟然没有答上来。痛定思痛决定深入研究下。
问题是这样的:给一字符串String s = "A1 man, a plan, a canal: Panam1a";忽略字母大小写的情况下,只判断里面的字符和数字组成的字符串是不是回文。
要解决这样的问题我们先从简单的字符串判断回文说起。首先我们使用递归的方法判断一个普通的字符串是不是回文
public static boolean isPa(String s){
if(s.charAt(0) == s.charAt(s.length() - 1)){
if(s.length() > 2){
return isPa(s.substring(1,s.length()-1));
}else{
return true;
}
}
return false;
}
依据上面的方法我们来解决那个特殊的字符串
public static boolean isPa(String s){
if(!isDigLet(s.charAt(0))){
return isPa(s.substring(1,s.length()));
};
if(!isDigLet(s.charAt(s.length() -1))){
return isPa(s.substring(0,s.length() -1));
};
if(s.charAt(0) == s.charAt(s.length() -1)){
if(s.length() > 2){
return isPa(s.substring(1,s.length()-1));
}else{
return true;
}
}else{
return false;
}
}
public static void main(String[] str) {
String s = "A man, a plan, a canal: Panama";
// String s = "amanaplanacanalpanama";
s = s.toLowerCase();
System.out.println(isPa(s));
}
当然了,对于java来说丰富的接口函数,实现这样的功能简直“洒洒水啦”,可惜面试官不让使用replaceAll函数,也就可惜了。
public static boolean isPa(String s){
String str = s.toLowerCase().replaceAll("[^a-zA-Z0-9]","").toLowerCase();
StringBuilder stringBuffer = new StringBuilder(str);
String ss = stringBuffer.reverse().toString();
if(str.equals(ss)){
return true;
}else{
return false;
}
}
网友评论