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

计算字符串的编辑距离

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

# 思路:
# 对于两个单字符a,b,考虑是否相同:
# 1.相同,则不需要改变,编辑距离为0
# 2.不相同,需要改变。方法是替换,编辑距离为1
# 对于两个字符串a,b,考虑切片a[:i]段,b[:j]段是否相同。先看末位
# 1.相同 不需要改变。编辑距离应等同于都去掉该位的字符串a[:i],b[:j]的编辑距离,记为dp[i][j] = dp[i-1][j-1]
# 2.不相同 需要改变此位。要使a[i]==b[j],可以:
# 2.1替换a[i]为b[j],之后需要将a[:i-1]段转换为b[:j-1]段,故编辑距离为dp[i-1][j-1]+1
# 2.2删除a[i],之后需要将a[:i-1]段转换为b[:j]段,故编辑距离为dp[i-1][j]+1
# 2.3添加b[j]在a[i]之后,之后需要将a[:i]段转换为b[:j-1]段,故编辑距离为dp[i][j-1]+1
# 上述操作后即可实现a[:i]段==b[:j]。a[:i]段转换为b[:j]的最小次数也应当是上述式子的最小值


text1 = input()
text2 = input()

dp = [[0 for j in range(len(text2)+1)] for i in range(len(text1)+1)]

# 构建dp
for i in range(1,len(text1)+1):
    dp[i][0] = i
for j in range(1,len(text2)+1):
    dp[0][j] = j
# 设置初值
# for tmp in dp:
#     print(tmp)

# dp
for i in range(1,len(text1)+1):
    for j in range(1, len(text2)+1):
        if text1[i-1] == text2[j-1]:
            dp[i][j] = dp[i-1][j-1]
        else:
            dp[i][j] = min(dp[i-1][j-1]+1, dp[i-1][j]+1, dp[i][j-1]+1)

print(dp[len(text1)][len(text2)])




全部评论

相关推荐

2025-11-13 19:44
哈尔滨工程大学 Java
二战小红书,又是二面挂,还是做不到。先吃饭吧。9.18小红书商业技术实习深挖分布式锁设置五分钟过期并在finally里释放锁会不会有释放不了的时候,看门狗机制如何实现,它的后台线程是什么类型spisynchronized,monitorexit执行两次你知道吗AQS垃圾回收器mysql锁redis过期删除,怎么选取过期key,数据量大的话这键值字典和过期字典会不会比较大手撕最长上升子序列9.24小红书商业技术实习FAQ的理解实习意图识别或者提示词这块有什么细节的困难,怎么解决的实习定时任务和kafka发消息这块实现细节,现在定时任务要扫描的数据变成亿级了该怎么设计实习问答匹配率提升20%怎么来的数据,分子分母是啥看你实习了挺久,没提转正吗如果offer比较多你如何选择无手撕11.10小红书风控工程介绍实习,参数提取检验补齐有了新业务意图是需要再扩展吗,意图识别提升10%哪来的,哪块是最有挑战的,系统吞吐量多少,用到哪些大模型了java注解,自己用过吗jvm内存模型mysql什么情况适合建索引kafka怎么消息去重linux查看端口被哪个进程占用命令手撕全排列11.12小红书风控工程考研辅导经历,考研成绩,本科成绩,为什么考研,高考为什么没考好,本科成绩平平研究生成绩不错是怎么转变的,为什么走工程不走算法实习经历,提取参数的过程中用户问别的会怎么样,挑战困难,转正情况kafka会丢失消息吗,消费者消费失败broker怎么感知到从而重新投递呢,消费者怎么知道自己从哪里重新拉取,消费成功后没及时记录offset会不会重复消费rpc过程怎么找到对应服务的,一直访问注册中心会不会压力大优缺点,自驱力高的原因,怎么做到长期坚持的,平时怎么学习,平时沟通也这么谨慎吗,有什么爱好进程线程,文件内容读到内存是单线程还是多线程好,磁盘是机械磁盘和固态磁盘对答案有影响吗大文件中内容都是单词,需要对单词排序,什么思路,会内存溢出吗无手撕
查看28道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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