public static List<String> getStringhw(String hwstring){
List<String> list=new ArrayList<String>();
char[] chars = hwstring.toCharArray();
for (int i = 0; i < chars.length; i++) {
//得到一级字符串
String start= String.valueOf(chars[i]);
for (int j = (i+2); j < chars.length; j++) {//二级从第3个开始查
//判断后字符是否与一级字符相等
String end = String.valueOf(chars[j]);
if (start.equals(end)) {
int hw = (j - i) + 1;
if (hw >= 3 && hw % 2 == 1) {//当大于3时循环判断对应的字符串是否相等
boolean bon=true;
for (int k = 1; k < hw; k++) {
String start1 = String.valueOf(chars[i + k]);
String end1 = String.valueOf(chars[j - k]);
if (!start1.equals(end1)) {
bon=false;
break;
}
}
//组装回文字符串
if (bon) {
String value = "";
for (int k = i; k <= j; k++) {
value += String.valueOf(chars[k]);
}
list.add(value);
}
} else {
//不相等推出当前循环继续下次循环
continue;
}
}
}
}
return list;
}
通过两个循环实现,回文字符串最小为3个length ,所以第二个循环是第一个循环index+2的起始值。
在第二个循环中判断循环1和循环2的value是否equals相等,不相等直接false掉继续下个循环。
true的话,int hw = (j - i) + 1; 计算回文的字符长度,判断长度最小不能小于3,且值为奇数,在进行循环回文字符内的字符是否相等。
boolean bon=true;
for (int k = 1; k < hw; k++) {
String start1 = String.valueOf(chars[i + k]);
String end1 = String.valueOf(chars[j - k]);
if (!start1.equals(end1)) {
bon=false;
break;
}
}
当回文字符内中的值不相等时为false 直接跳出当前循环(加break是为了防止不必要的运算,浪费性能)
当回文前后相同时,完全成立,直接组装字符串到list,并返回。
if (bon) {
String value = "";
for (int k = i; k <= j; k++) {
value += String.valueOf(chars[k]);
}
list.add(value);
}
这是前期面试时出的题,当时需要手写代码,没做出来,现在闲暇时间写了一遍。还是很简单的。不知道还有没有别的方法实现。有更好的实现方式己得联系我啊哈哈