java实现动态规划算法的一个例子
A和B是两个字符串,用最少的字符操作将A转换为B,操作包括:删除一个字符、插入一个字符、替换一个字符。
我想的是先找出两个字符串的最长公共子序列,但LCS可以有很多种,求出LCS后如何进行接下来的操作还是个问题,陷入无解状态,求高人帮忙解答,不胜感激。
[解决办法]
这个问题好
很多讲字符串匹配的,讲到这里就一笔带过,同样期待指点
[解决办法]
代码如下:
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]; }}