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; }
}