import java.util.*;
public class Main{
//主方法
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String str=sc.next();
//两种回文字符,让最大的上
int max=Math.max(maxPalindrome(str),maxPalindrome2(str));
System.out.println(max);
}
}
/** 判断ABA型最大长度,本来只有这个方法的,忽然想起还有ABBA型的,修改一下,
改成ABBA型继续用
*/
public static int maxPalindrome(String str){
int max=1;//先定义最大长度为1
for(int i=1;i<str.length()-1;i++){ //ABA形状最少得三个吧,所以从坐标一开始遍历,到长度-2为止
//判断能找点i到数组边界的半径,也就是循环能走多少次,一个数组,左边的数据,坐标为i的到坐标为0的长度就是i,末尾的就是长度减i-1,其实拿笔画一下就理解了
int count=Math.min(i,str.length()-i-1);
int maxCount=1; //本次找到得最长长度
//以i为中心,如果两侧字符一样,再找下一个,断了就break,这样找到以该点为中心的最长的回文字符
for(int j=1;j<=count;j++){
if(str.charAt(i-j)==str.charAt(i+j)){
maxCount+=2;
}else{
break;
}
}
max=Math.max(max,maxCount);
}
return max;
}
//判断ABBA型最大长度的方法
public static int maxPalindrome2(String str){
int max=1;
for(int i=1;i<str.length()-1;i++){
int count=Math.min(i,str.length()-i-2);
int maxCount=1;
//原理和上面类似,不过是先找到一对一样的字符也就是ABBA中的BB
if(str.charAt(i)==str.charAt(i+1)){
maxCount=2;
for(int j=1;j<=count;j++){
if(str.charAt(i-j)==str.charAt(i+j+1)){
maxCount+=2;
}else{
break;
}
}
}
//保留最长的
max=Math.max(max,maxCount);
}
return max;
}}



京公网安备 11010502036488号