import java.util.Scanner;
class Solution {
String zuichanghuiwen = " ";
int zuichanghuiwen_len=0;//回文数长度
int zuichanghuiwen_qishiwei=0;//回文数起始位
StringBuffer buffer=new StringBuffer();//用于存储所有的回文数
//判断字符串是否是回文
public void find_huiwen(String s,int low, int high) {
while(low>=0 && high<s.length()) {
if(s.charAt(low)==s.charAt(high)) {
if(zuichanghuiwen_len<=high-low+1) {
zuichanghuiwen_len=high-low+1;
zuichanghuiwen=s.substring(low, high+1);
zuichanghuiwen_qishiwei=low;
//System.out.println("打印中:"+zuichanghuiwen);
buffer.append(zuichanghuiwen).append(",");//将字符串中所有的回文数存储到buffer中
}
high++;
low--;
}else {
break;
}
}
}
//动态规划寻找回文数
public String find_zuichanghuiwen(String s) {
if(s==null||s.length()<=1) {
System.out.println("无回文数");
return s;
}
for (int i = 0; i < s.length(); i++) {
find_huiwen(s, i, i);//奇回文串
find_huiwen(s, i, i + 1);//偶回文串
}
if (zuichanghuiwen.length() == 1) {
System.out.println("无回文数");
return s;
} else {
System.out.println("最后一次出现的最长回文数为: "+zuichanghuiwen+
" 。最后一次出现的最长回文起始位:" + zuichanghuiwen_qishiwei +
" 。最长回文位数:" + zuichanghuiwen_len);
return s;
}
}
}
public class Test2 {
public static void main(String[] args) {
System.out.println("输入字符串");
Scanner sc=new Scanner(System.in);//键盘输入字符串
String s=sc.next().toString();
Solution solution=new Solution();
solution.find_zuichanghuiwen(s);
System.out.println("buffer所有的回文数:"+solution.buffer);//输出所有回文串
String buffer_str= solution.buffer.toString();
String[] arr=buffer_str.split(",");
//最后出来的回文数是最长的,所以对应的zuichanghuiwen_len最大
// 只需要找长度相同的回文数,就可以打印出所有的最长回文数
System.out.print("最长回文数有:");
for(int i=0;i<arr.length;i++){
if(arr[i].length()==solution.zuichanghuiwen_len){
System.out.print(arr[i]+" ");
}
}
sc.close();
}
}