Java算法题2: 最长的回文子串求解

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设的最大长度为1000。

示例 1:

    输入:"babad"输出:"bab"注意:"aba"也是一个有效答案。

示例 2:

    输入:"cbbd"输出:"bb"



解题思路很简单:

    为了找到所要的回文字符串,我们需要遍历整一个字符串。

    那么我们可以通过嵌套循环的方式截取字符串来判断是否为回文字符串;

    如果是,并且对比之前存储的最大回文字符maxString,比maxString长度还长的话则替换该字符。

    如何判断是否为回文字符串?

    从两端 i , j 同时开始循环,对比两个字母的如果都是相等的,那么就是回文字符了,约束条件是 i <= j ,即是中间的位置。



public static String checkStr(String str) {

    str = str.toLowerCase();

    if(null == str || str.length() == 0) {

            return "参数错误,参数为空!";

    }

    // 字符的长度

    int length = str.length();

    // 存放最终得到的最大回文字符结果

    String maxString = "";

     // 双重循环截取我们所要判断的字符串

    for (int i = 0; i < length; i++) {

            for(int j=i; j < length+1; j++) {

                    String cutStr = str.substring(i, j);

                    // 判断截取的字符串是否为回文字符串,且大于之前的maxString的长度时,则替换

                    if(isHuiwen(cutStr) && cutStr.length() > maxString.length()) {

                            maxString = cutStr;

                    }

            }

        }

        if (maxString.length() >= 2) {

                return maxString;

        }else {

                return null;

         }

}

private static boolean isHuiwen(String cutStr) {

        boolean flag = true;

        int length = cutStr.length();

        char arrayStr[] = cutStr.toCharArray();

        // 从两端分别开始对比

        for (int i = 0, j = length-1; i<=j; i++, j--) {

                if(arrayStr[i]!=arrayStr[j]) {

                        flag = false;

                }

          }

        return flag;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容