暴力求解,最开始想法是双层循环遍历所有子字符串,逐个判断是否回文,取最大值; 但题目只要最大回文长度就好,所以遍历可以设置检测长度从s.length()递减,不会遍历到较小字符串。

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String s=sc.nextLine();
            int ans=0;
            //双层循环暴力求解
//             for(int i=0;i<s.length();i++){
//                 for(int j=s.length()-1;j>i;j--){
//                     if(ifback(s,i,j)){
//                         ans=Math.max(ans,j-i+1);
// //                         break;
//                     }
//                 }
//             }
            //按照长度递减寻找最长回文字符串
            for(int i=s.length();i>1;i--){
                for(int j=0;j+i-1<s.length();j++){
                    if(ifback(s,j,j+i-1)){
                        ans=Math.max(ans,i);
                        break;
                    }
                }
            }
            System.out.println(ans);
        }
    }
    //判断字符串st,en之间是否为回文字符串
    public static boolean ifback(String s,int st,int en){
        while(en>st){
            if(s.charAt(st)!=s.charAt(en)){
                return false;
            }
            else{
                en--;
                st++;
            }
        }
        return true;
        
    }
}