日期:2014-05-20  浏览次数:20653 次

java实现动态规划算法的一个例子
A和B是两个字符串,用最少的字符操作将A转换为B,操作包括:删除一个字符、插入一个字符、替换一个字符。

我想的是先找出两个字符串的最长公共子序列,但LCS可以有很多种,求出LCS后如何进行接下来的操作还是个问题,陷入无解状态,求高人帮忙解答,不胜感激。

------解决方案--------------------
这个问题好
很多讲字符串匹配的,讲到这里就一笔带过,同样期待指点
------解决方案--------------------
代码如下:
Java code

package cie.bing.string;

public class EDlength
{
    public static int min(int a,int b,int c)
    {
         int t = a < b ? a : b;    
            return t < c ? t : c;
    }
    public static int edit(char P[],char T[],int m,int n)
    {
       int i,j;
       int D[][]=new int[m+1][n+1];
       for(i=1;i<=m;i++)
       {
           for(j=1;j<=n;j++)
           {
               if(i==1 && j==1)
               {
                   if(P[i-1]==T[j-1])
                   {
                        D[i][j]=0;
                   }
                   else
                   {
                       D[i][j]=D[i-1][j-1]+1;
                   }
               }
               else if(i==1 && j!=1)
               {
                   if(P[i-1]==T[j-1])
                   {
                       D[i][j]=D[i][j-1]+1;
                   }
                   else
                   {
                       D[i][j]=j-1;
                   }
               }
               else if(i!=1 && j==1)
               {
                   if(P[i-1]==T[j-1])
                   {
                       D[i][j]=D[i-1][j]+1;
                   }
                   else
                   {
                       D[i][j]=i-1;
                   }
               }
               else
               {
                   if(P[i-1]==T[j-1])
                       D[i][j]=D[i-1][j-1];
                     else if(P[i-1]!=T[j-1])
                       D[i][j]=min(D[i-1][j-1]+1,D[i-1][j]+1,D[i][j-1]+1);
               }
           }
       }
    return D[m][n];
    }
}