java查询字符串中所有的回文字符串返回list

 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);
                        }

这是前期面试时出的题,当时需要手写代码,没做出来,现在闲暇时间写了一遍。还是很简单的。不知道还有没有别的方法实现。有更好的实现方式己得联系我啊哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值