码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 代码随想录算法训练营Day55 | 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结篇 | Python | 个人记录向


    本文目录

    • 583. 两个字符串的删除操作
      • 做题
      • 看文章
    • 72. 编辑距离
      • 做题
      • 看文章
    • 编辑距离总结篇
    • 以往忽略的知识点小结
    • 个人体会

    583. 两个字符串的删除操作

    代码随想录:583. 两个字符串的删除操作
    Leetcode:583. 两个字符串的删除操作

    做题

    找出最长公共子序列,然后用两个字符串的长度和减去两倍最长公共子序列长度即可。

    class Solution:
        def minDistance(self, word1: str, word2: str) -> int:
            dp = [[0] * (len(word2) + 1) for _ in range(len(word1) + 1)]
            for i in range(1, len(word1)+1):
                for j in range(1, len(word2)+1):
                    if word1[i-1] == word2[j-1]:
                        dp[i][j] = dp[i-1][j-1] + 1
                    else:
                        dp[i][j] = max(dp[i-1][j], dp[i][j-1])
            return len(word1) + len(word2) - 2 * dp[len(word1)][len(word2)]
    

    时间复杂度: O(n * m)
    空间复杂度: O(n * m)

    看文章

    有直接求解的思路。dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。

    class Solution:
        def minDistance(self, word1: str, word2: str) -> int:
            dp = [[0] * (len(word2)+1) for _ in range(len(word1)+1)]
            for i in range(len(word1)+1):
                dp[i][0] = i
            for j in range(len(word2)+1):
                dp[0][j] = j
            for i in range(1, len(word1)+1):
                for j in range(1, len(word2)+1):
                    if word1[i-1] == word2[j-1]:
                        dp[i][j] = dp[i-1][j-1]
                    else:
                        dp[i][j] = min(dp[i-1][j-1] + 2, dp[i-1][j] + 1, dp[i][j-1] + 1)
            return dp[-1][-1]
    

    时间复杂度: O(n * m)
    空间复杂度: O(n * m)

    72. 编辑距离

    代码随想录:72. 编辑距离
    Leetcode:72. 编辑距离

    做题

    无思路。

    看文章

    前期的铺垫都是为了这道题。
    动规五部曲:

    1. 确定dp数组(dp table)以及下标的含义

      dp[i][j] 表示以下标i-1为结尾的字符串word1,和以下标j-1为结尾的字符串word2,最近编辑距离为dp[i][j]。

    2. 确定递推公式

      编辑的几种操作:

      if (word1[i - 1] == word2[j - 1])
          不操作
      if (word1[i - 1] != word2[j - 1])
          增
          删
          换
      

      增、删:dp[i][j] = dp[i - 1][j] + 1、dp[i][j] = dp[i][j - 1] + 1
      换:dp[i][j] = dp[i - 1][j - 1] + 1

      几种操作取最小,就是递推公式。

    3. dp数组如何初始化

      dp[i][0] :以下标i-1为结尾的字符串word1,和空字符串word2,最近编辑距离为dp[i][0]。
      那么dp[i][0]就应该是i,对word1里的元素全部做删除操作,即:dp[i][0] = i; 同理dp[0][j] = j;

    4. 确定遍历顺序

    5. 举例推导dp数组

    具体代码如下:

    class Solution:
        def minDistance(self, word1: str, word2: str) -> int:
            dp = [[0] * (len(word2)+1) for _ in range(len(word1)+1)]
            for i in range(len(word1)+1):
                dp[i][0] = i
            for j in range(len(word2)+1):
                dp[0][j] = j
            for i in range(1, len(word1)+1):
                for j in range(1, len(word2)+1):
                    if word1[i-1] == word2[j-1]:
                        dp[i][j] = dp[i-1][j-1]
                    else:
                        dp[i][j] = min(dp[i-1][j-1], dp[i][j-1], dp[i-1][j]) + 1
            return dp[-1][-1]
    

    时间复杂度: O(n * m)
    空间复杂度: O(n * m)

    编辑距离总结篇

    代码随想录:编辑距离总结篇

    以往忽略的知识点小结

    • 编辑距离是最后的汇总题,包含增、删、改这三种操作,增删可以理解为同一种

    个人体会

    完成时间:1h30min。
    心得:编辑距离总结,把两字符之间的增删改解决了。

    ​

  • 相关阅读:
    u盘文件突然不见了如何找回呢?
    Codeforces Round #797 (Div. 3) E. Price Maximization
    微信支付、微信公众号接口认证方案
    毕业设计 基于51单片机老人防跌倒GSM短信报警系统
    IDA 反汇编 explorer
    【lambda表达式】Comparator接口
    数据结构——深度优先遍历(DFS)无向连通图
    个人实现的可任意折叠QToolBox——AdvancedToolBox
    opencv的MinGW-W64编译
    LSS,2D->3D,Lift-Splat-Shoot:通过隐式反投影到3D空间实现对任意相机图像编码
  • 原文地址:https://blog.csdn.net/Xiu_Yuan123/article/details/139317764
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号