(蓝桥杯每日一题)求最长回文串

问题描述
给出一个长度为 n 的小写字符串,求一个最长的子串 S,满足S=XY,X,Y>1,且X,Y 均为回文串。
输入格式
输入包括一行:
第一行是一个长度为 n 的小写字符串。
输出格式
输出包括一行:
一行一个整数,表示满足条件的最长子串S 的长度

(蓝桥杯每日一题)求最长回文串_第1张图片

代码如下:

    public class teseeeee {
            static int i;
            static int j;
            static String[] ss=new String[2];        //static共享数据
            public static boolean isPalindrome(String s) {       //判断是否为回文串
                return s.equals(new StringBuilder(s).reverse().toString());
            }

            public static int findLongestSubstring(String s) {        //计算最大字符串长度,并将剩下字符串存入数组
                int n = s.length();
                int maxLength = 0;

                for ( i = 0; i < n; i++) {
                    for ( j = i + 1; j <= n; j++) {
                        if (j - i > maxLength) {
                            if (isPalindrome(s.substring(i, j))) {
                                maxLength = j - i;    //计算最大长度

                                String s1=s.substring(i,j);
                                String news=s.replace(s1,",");
                                ss=news.split(",");
                            }
                        }
                    }
                }

                return maxLength;
            }

            public static void main(String[] args) {
                // 读取输入字符串
                String inputString = "baacaabbacabb";

                // 调用函数计算最长子串的长度
                int result = findLongestSubstring(inputString);
                int max=0;
                for (int k = 0; k < ss.length; k++) {        //将剩下的字符串进行检验
                    int result1 = findLongestSubstring(ss[k]);
                    if(result1>max)
                    {
                        max=result1;
                    }
                }
                result=max+result;
                // 输出结果
                System.out.println(result);
            }
        }

结果如下:

(蓝桥杯每日一题)求最长回文串_第2张图片

你可能感兴趣的:(算法)