1. (2014)计算两个字符串的编辑距离
问题定义
把两个字符串变成相同的三个基本操作定义如下:
- 修改一个字符(如把a 变成b)
- 增加一个字符(如abed 变成abedd)
- 删除一个字符(如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[i−1][j−1]min{
d