题目:给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
输出需要删除的字符个数。
输出需要删除的字符个数。
思路参考链接:点击打开链接
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
while(scan.hasNext()) {
String s = scan.nextLine();
//System.out.println(s);
int length = s.length()-lcs(s);
System.out.println(length);
}
}
public static int lcs(String str){
int len = str.length();
char [] arr1 = str.toCharArray();
char [] arr2 = new String( new StringBuilder(str).reverse()).toCharArray();
int [][] r = new int [len+1][len+1];
for (int k =0;k <len + 1;k++){
r[k][0] = 0;
r[0][k] = 0;
}
for(int i =0;i<len;i++){
for(int j = 0;j<len;j++){
if(arr1[i]==arr2[j])
r[i+1][j+1] = r[i][j]+1;
else{
int max = r[i][j];
if(max<r[i+1][j])
max = r[i+1][j];
if(max<r[i][j+1])
max = r[i][j+1];
r[i+1][j+1] = max;
}
}
}
return r[len][len];
}
}