题解 | #计算字符串的距离#

计算字符串的距离

http://www.nowcoder.com/practice/3959837097c7413a961a135d7104c314

#动态规划经典题目
#nowcoder不能导入numpy模块,只能手工创建二维数组
#重点注意二维数据的创建方法,重点注意其横竖坐标,注意注意
#dp = [[1 for i in range(n+1)] for j in range(m+1)],横坐标是 n, 竖坐标是m
while True:
    try:
        str1 = input()
        str2 = input()
        m = len(str1)
        n = len(str2)
        
        dp = [[1 for i in range(n+1)] for j in range(m+1)]#重点注意二维数据的创建方法,重点注意其横竖坐标,注意注意
        for i in range(n+1):
            dp[0][i] = i
        for j in range(m+1):
            dp[j][0] = j
            
        for i in range(1,m+1):
            for j in range(1,n+1): 
                if str1[i-1] == str2[j-1]:#如果当前两个字母相同,则跳过,步数不增加
                    dp[i][j]=dp[i-1][j-1]
                else:  #如果两个字母不同,则有三种方式可以达成,删除、插入、替换,选择最小的前状态,步数加1
                    dp[i][j] = min(dp[i-1][j-1],dp[i][j-1],dp[i-1][j])+1
        print(dp[m][n])
    except:
        break

全部评论
为什么构建数组值要默认全为1呢?
点赞 回复 分享
发布于 2024-08-29 17:47 广东
点赞 回复 分享
发布于 2023-06-28 13:53 广东
为什么横竖坐标要是n,m呢,直观理解我的横竖坐标是m,n然后就错了显示越界,但是我不理解,换过来就过了。
点赞 回复 分享
发布于 2023-05-22 09:22 陕西
有没有大佬解释一下为什么把第12行的内容变成这句就不行 dp = [[1]*(n+1)]*(m+1) 我打印了这两个变量,他们两个变量是相等的。
点赞 回复 分享
发布于 2022-12-14 15:19 广东
为啥当前字母是 str1[i-1] == str2[j-1],而不是 str1[i] == str2[j]呢
点赞 回复 分享
发布于 2022-06-23 09:13

相关推荐

少年郎as:这不把公司名贴出来那我可要喷你了哦
点赞 评论 收藏
分享
评论
58
12
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务