1 /**
2 * 求一个字符串的最大回文串,可以在两边和中间删除任意多个字符,使剩下的字符串为回文串
3 * 可以使用回溯法
4 */
5 import java.util.Scanner;
6
7 public class Palindrome {
8 static int[] flag;
9 static int length;
10 static String s;
11 static int maxLength;
12 static String maxString;
13
14 public static void main(String[] args) {
15 Scanner sc = new Scanner(System.in);
16 while(sc.hasNext()){
17 s = sc.next();
18 length = s.length();
19 flag = new int[length];
20 maxLength = 0;
21 f(0);
22 System.out.println(maxString + " " + maxLength);
23 }
24 }
25
26 public static void f(int n){
27 //递归出口
28 if(n==length){
29 StringBuffer sb = new StringBuffer();
30 for(int i=0;i<length;i++){
31 if(flag[i]==1){
32 sb.append(s.charAt(i));
33 }
34 }
35 //判断回文串
36 if(sb.toString().equals(sb.reverse().toString())&&sb.length()>maxLength){
37 maxString = sb.toString();
38 maxLength = sb.length();
39 }
40 return;
41 }
42
43 //要
44 flag[n]=1;
45 f(n+1);
46
47 //不要
48 flag[n]=0;
49 f(n+1);
50 }
51 }