最大回文串
题目描述
最大回文子串是被研究得比较多的一个经典问题。最近月神想到了一个变种,对于一个字符串,如果不要求子串连续,那么一个字符串的最大回文子串的最大长度是多少呢。
输入描述:
每个测试用例输入一行字符串(由数字0-9,字母a-z、A-Z构成),字条串长度大于0且不大于1000.
输出描述:
输出该字符串的最长回文子串的长度。(不要求输出最长回文串,并且子串不要求连续)
示例1
输入
复制
adbca
输出
复制
3
说明
因为在本题中,不要求回文子串连续,故最长回文子串为aba(或ada、aca)
备注:
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException{
int[] p = new int[128];
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
char[] ch = reader.readLine().toCharArray();
reader.close();
int[][]dp = new int[ch.length][ch.length];
for(int i=0;i<ch.length;++i) {
dp[i][i] = 1;
}
for(int i=ch.length-2;i>=0;--i) {
for(int j= i+1;j<ch.length;++j) {
if(ch[i]==ch[j]) {
dp[i][j] = dp[i+1][j-1]+2;
}else{
dp[i][j] = Math.max(dp[i+1][j],dp[i][j-1]);
}
}
}
System.out.println( dp[0][ch.length-1] );
// StringBuilder sb = new StringBuilder();
// sb.reverse();
}
// static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
// public static String read() throws IOException {
// return bf.readLine();
// }
// public static void close() throws IOException{
// bf.close();
// }
}