java--动态规划--编辑距离问题

编辑距离就是用来计算从原串(s)转换到目标串(t)所需要的最少的插入,删除和替换的数目。

两个字符串之间的编辑距离等于使一个字符串变成另外一个字符串而进行的(1)插入、(2)删除、(3)替换

java代码实现:

package ceshi;


public class EditDistance {


public static void main(String[] args) {
String s = "abcdefgehig";
String t = "abdngjfmageajfl";
System.out.println(getDistance(s,t));
}
public static int getDistance(String s,String t){
int cost = 0;
int n = s.length();
int m = t.length();
int[][] d = new int[n+1][m+1];
if(n==0){return m;}
if(m==0){return n;}

for(int i=0;i<=n;i++){
d[i][0] = i;
}
for(int j=0;j<=m;j++){
d[0][j] = j;
}
for(int i=1;i<=n;i++){
int s_i = s.charAt(i-1);
for(int j=1;j<=m;j++){
int t_j = t.charAt(j-1);
if(s_i==t_j){
cost=0;
}else{
cost=1;
}
d[i][j]=min(d[i-1][j]+1,d[i][j-1]+1,d[i-1][j-1]+cost);
}
}
return d[n][m];
}
public static int min(int a,int b,int c){
int m;
m = a;
if(b<m){m=b;}
if(c<m){m=c;}
return m;
}
}

可以使用最短编辑距离算法和Java-diff-utils库来编写比对程序。最短编辑距离算法可以用来计算两个字符串之间的最小编辑操作数,而Java-diff-utils库可以帮助我们生成两个字符串之间的差异。 首先,你需要导入Java-diff-utils库到你的项目中。你可以在Maven或Gradle的配置文件中添加相应的依赖项来引入该库。 接下来,你可以使用最短编辑距离算法(例如Levenshtein距离)来计算两个字符串之间的最小编辑操作数。你可以实现一个函数来计算最小编辑距离,例如: ```java public static int calculateEditDistance(String str1, String str2) { int m = str1.length(); int n = str2.length(); int[][] dp = new int[m + 1][n + 1]; for (int i = 0; i <= m; i++) { dp[i][0] = i; } for (int j = 0; j <= n; j++) { dp[0][j] = j; } for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { if (str1.charAt(i - 1) == str2.charAt(j - 1)) { dp[i][j] = dp[i - 1][j - 1]; } else { dp[i][j] = 1 + Math.min(dp[i - 1][j - 1], Math.min(dp[i][j - 1], dp[i - 1][j])); } } } return dp[m][n]; } ``` 然后,你可以使用Java-diff-utils库来生成两个字符串之间的差异。你可以实现一个函数来比较两个字符串,并返回差异结果,例如: ```java public static String compareStrings(String str1, String str2) { Patch<String> patch = DiffUtils.diff(Arrays.asList(str1.split("\\n")), Arrays.asList(str2.split("\\n"))); List<Delta<String>> deltas = patch.getDeltas(); StringBuilder result = new StringBuilder(); for (Delta<String> delta : deltas) { result.append(delta).append("\n"); } return result.toString(); } ``` 在这个例子中,我们将两个字符串按行分割,并使用Java-diff-utils库中的`DiffUtils.diff`方法来获取差异。然后,我们遍历差异列表,并将每个差异添加到结果字符串中。 请注意,这只是一个简单的示例,你可能需要根据你的实际需求进行适当的修改和调整。 希望这能帮助到你!如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值