求算两个字符串之间的编辑距离

简述:

设A和B是两个字符串,要用最少的字符操作将字符串A转换为字符串B

字符串操作包括,

1)删除一个字符

2)插入一个字符

3)将一个字符改为另一个字符


算法:

模拟构造一个(m + 1)行,(n+1)列的表格

每一次都是在前一次的计算结果下,得到当前的值

首先是三个特殊情况 用srcStr表示源字符串,dstStr 表示目标字符串

1)    两个空字符串的编辑距离D(srcStr, dstStr) = 0

2)   如果srcStr为空,dstStr不为空,则D(srcStr, dstStr) = dstStr.length(), 即在原空字符串上添加字符,形成dstStr

3)   如果dstStr为空,srcStr不为空,则D(srcStr, dstStr) = srcStr.length(), 及在源字符串上删除其所有字符,直至为空


例子:

下面实际解决一下从srcStr = "bd"  到 dstStr = "abcd"的过程

上面这三种情况分别是初始化的时候要做的

首先用一维数组表示两位数组

纵向 i = 0 -> m+1 , d[i * (n + 1)] = i 

横向 i = 0 -> n+1, d[i] = i

即:如下图是初始化之后的表格信息,纵向是b,d   横向是a,b,c,d



步骤:

for(i = 1 -> 2)     //  2为“bd"的长度

      for( j = 1 -> 4 )   // 4 为”abcd"的长度

为了确定d[ i ][ j ]的大小, 需要比较

a)  从d[ i - 1 ][j - 1] 修改字符srcStr[i - 1], 使之变为dstStr[j - 1], 如果srcStr[i - 1] == dstStr[j - 1] 则这一步可以免去

b)  从d[ i - 1 ][ j ]  在srcStr的[ i - 1]处添加一个字符,使字符srcStr[ i - 1 ]变为dstStr[ j - 1 ]

c)  从d[ i ][ j - 1 ] 在dstStr的[ j - 1 ]处删除一个字符, 使字符dstStr[ j - 1 ]变为srcStr[ i - 1]

三者之间的最小值赋给d[ i ][ j ]


代码:

[java] view plain
  1. package dynamic_programming;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStream;  
  6. import java.io.InputStreamReader;  
  7.   
  8. public class StringToString {  
  9.     public static void main(String[] args) {  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值