求字符串最小回文子串

求一个字符串的回文子串,可以删除任意字符。

算法:

将一个字符串进行逆转,求原串和逆转串的最大公共子序列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     }

 

posted @ 2016-05-27 16:10  bounce  阅读(1074)  评论(0编辑  收藏  举报