问题描述
给出一个长度为 n 的小写字符串,求一个最长的子串 S,满足S=XY,X,Y>1,且X,Y 均为回文串。
输入格式
输入包括一行:
第一行是一个长度为 n 的小写字符串。
输出格式
输出包括一行:
一行一个整数,表示满足条件的最长子串S 的长度
代码如下:
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);}}
结果如下: