import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { String s = in.next(); System.out.println(LRS(s)); } } public static int LRS(String s) { char[] chars = s.toCharArray(); int len = chars.length; //dp[i][j]表示s[i...j]中最长回文串的长度,最长就是length int[][] dp = new int[len][len]; //初始化 for(int i=0;i<len;i++){ dp[i][i]=1;//每个字符本身就是一个长度为1的回文串 } //转移方程 //注意:最外层循环条件:枚举子串的长度 for(int l=2;l<=len;l++){ //内层循环条件为左边界 for(int i=0;i<len;i++){ //计算右边界 int j=i+l-1; if(j>=len)break; if(chars[i]==chars[j]){ dp[i][j]=dp[i+1][j-1]+2; }else{ dp[i][j]=Math.max(dp[i+1][j],dp[i][j-1]); } } } return dp[0][len-1]; } }