问题描述
给出一个长度为 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);
}
}
结果如下: