暴力求解,最开始想法是双层循环遍历所有子字符串,逐个判断是否回文,取最大值; 但题目只要最大回文长度就好,所以遍历可以设置检测长度从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;
}
}