给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。 输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述: 对于每组数据,输出一个整数,代表最少需要删除的字符个数。 输入例子1: abcda google 输出例子1: 2 2
import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); ArrayList<String> list = new ArrayList<String>(); while(s.hasNext()) { String m = s.next(); list.add(m); } for (String m : list) { StringBuffer rm = new StringBuffer(m); int len = LCS(m.toCharArray(),rm.reverse().toString().toCharArray()); System.out.println(m.length() - len ); } } public static int LCS(char[] m,char[] n) {//求最长公共子序列的长度 int[][] ret = new int[m.length+1][n.length+1]; for(int i=0;i<ret.length;i++) { for(int j=0;j<ret[i].length;j++) { if(i==0 || j==0) { ret[i][j] = 0; }else { if(m[i-1] == n[j-1]) { ret[i][j] = ret[i-1][j-1]+1; }else { ret[i][j] = Math.max(ret[i][j-1], ret[i-1][j]); } } } } return ret[m.length][n.length]; } }