编辑距离动态规划java_算法题目: 动态规划 之 最短编辑距离

问题:

对于长度相同的2个字符串A和B,其距离定义为相应位置字符距离之和。2个非空格字符的距离是它们的ASCII码之差的绝对值;空格与空格的距离为0,空格与其他字符的距离为一个定值k。在一般情况下,字符串A和B的长度不一定相同。字符串A的扩展是在A中插入若干空格字符所产生的字符串。在字符串A和B的所有长度相同的扩展中,有一对距离最短的扩展,该距离称为字符串A和B的扩展距离。对于给定的字符串A和B,设计一个算法,计算其扩展距离。

测试数据:

输入:cmc      snmn        2       (分别表示字符串A、B和定值k)

输出:10

输入:cdd      snmn        1       (分别表示字符串A、B和定值k)

输出:7

输入:cd      ad        1       (分别表示字符串A、B和定值k)

输出:2

//当场没做出来,汗颜啊

//回来查了下,原来是动态规划

//JAVA实现了一下:

import static java.lang.Math.abs;

import static java.lang.Math.min;

public class DPString {

public static int MAX_LEN = 2014;

public static int work(char str1[], char str2[], int k) {

int[][] dp = new int[MAX_LEN][MAX_LEN];

int length1 = str1.length;

int length2 = str2.length;

dp[0][0] = 0;

for (int i = 1; i <= length1; i++) {

dp[i][0] = i * k;

}

for (int i = 1; i <= length2; i++) {

dp[0][i] = i * k;

}

for (int i = 1; i <= length1; i++) {

for (int j = 1; j <= length2; j++) {

dp[i][j] = min(dp[i - 1][j - 1] + abs(str1[i - 1] - str2[j - 1]), min(dp[i - 1][j], dp[i][j - 1]) + k);

}

}

return dp[length1][length2];

}

public static void main(String[] args) {

String stra = "cdd";

String strb = "snmn";

int k = 1;

System.out.println(work(stra.toCharArray(), strb.toCharArray(), k));// output 7

}

}

呵呵,写完之后发现网上有篇更详细的解析:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值