复旦研究生历年机试试题

1. (2014)计算两个字符串的编辑距离
问题定义
把两个字符串变成相同的三个基本操作定义如下:

  1. 修改一个字符(如把a 变成b)
  2. 增加一个字符(如abed 变成abedd)
  3. 删除一个字符(如jackbllog 变成jackblog)
    针对于jackbllog 到jackblog 只需要删除一个或增加一个l 就可以把两个字符串变为相同。把这种操作需要的最小次数定义为两个字符串的编辑距离L。
    编写程序计算指定文件中字符串的距离。输入两个长度不超过512 字节的ASCII 字符串,在屏幕上输出字符串的编辑距离。
    输入样例
    Hello world!
    Hello wortd!
    输出样例
    1

分析: 和最长公共子串极为相似,具体为
dp[i][j]={ dp[i−1][j−1]str1[i]=str2[j]min⁡{ dp[i−1][j−1]+1,dp[i−1][j]+1,dp[i][j−1]+1}str1[i]≠str2[j]dp[i][j] = \begin{cases} dp[i-1][j-1] & str1[i] = str2[j] \\ \min\{dp[i-1][j-1]+1,dp[i-1][j]+1,dp[i][j-1]+1\} & str1[i] \neq str2[j] \end{cases}dp[i][j]={ dp[i1][j1]min{ d

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值