求字符串最小回文子串
求一个字符串的回文子串,可以删除任意字符。
算法:
将一个字符串进行逆转,求原串和逆转串的最大公共子序列LCS,length-LCS就为需要删除的字符的个数。
实现:
1 public static int getLCS(String s){ 2 String s2=s; 3 StringBuffer sb=new StringBuffer(s2); 4 String s1=sb.reverse().toString(); 5 int len=s.length(); 6 int maxN=1010; 7 int dp[][]=new int[maxN][maxN]; 8 for(int i=0;i<maxN;i++){ 9 for(int j=0;j<maxN;j++){ 10 dp[i][j]=0; 11 } 12 } 13 for(int i=0;i<len;i++){ 14 for(int j=0;j<len;j++){ 15 if(s.charAt(i)==s1.charAt(j)){ 16 dp[i+1][j+1]=dp[i][j]+1; 17 18 }else{ 19 dp[i+1][j+1]=Math.max(dp[i][j+1], dp[i+1][j]); 20 } 21 } 22 } 23 return dp[len][len]; 24 } 25 public static void main(String []args){ 26 String m="abccmb"; 27 System.out.println(m.length()); 28 System.out.println(mytes.getLCS(m)); 29 int length=m.length()-mytes.getLCS(m); 30 System.out.println("需要删除的字符个数"+length); 31 }