计算两字符串之间的距离

这个问题是对问题“已知两个字符串s和t,对s在任意位置执行三种操作:插入一个字符;删除一个字符;替换一个字符,求将s变成t所需要的最少操作次数x”的延伸,其实就是多加一步公式1-x/max(len(s),len(t)),因为将字符串s变成字符串t需要变化的次数越多,那么两个字符串之间的距离就越大。

那么如何求字符串s变成字符串t的次数呢,假设len(s)=m,len(t)=n,建立一个[m,n]的二维表来记录变化次数,以abd和adfg为例,
首先初始化,表格如下,

iabd
j0123
a1
d2
f3
g4

然后,如果比较的两字符相等,则每一个i对应位置需要移动的次数是(i-1, j-1),(i, j-1),(i-1, j)中最小值,否则为最小值+1,更新i中第一列,如下

iabd
j0123
a10
d20+1
f31+1
g42+1

逐列更新后得:

iabd
j0123
a1012
d2111
f3222
g4333

最后输出[m,n]对应位置的值3。
验证,要使s变为t需要1删除b,2添加f,3添加g共3步,一致。
故abd和adfg之间的距离为1-3/4 = 1/4.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值