当前位置: 首页 > article >正文

Leetcode 3031. Minimum Time to Revert Word to Initial State II

  • Leetcode 3031. Minimum Time to Revert Word to Initial State II
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3031. Minimum Time to Revert Word to Initial State II

1. 解题思路

这一题就是一个z算法的题目,算是比较套路的题目了。

关于z算法,之前我们已经写过一个博客(经典算法:Z算法(z algorithm))对这个经典算法本身进行了一下介绍,这里就不展开了,有兴趣的读者可以自行跳转去看一下,或者网上随便其他找一个介绍文章也可以,挺常见的一个算法了。

因此,我们就只看一下z算法是如何应用到这道题目就行了。显然,由于每次移除前k个字符,然后再最后补充k个字符,因此,如果存在某次移除k个字符之后,剩余的子串与原始字符串的开头部分完全一致,那么,我们只需要在后续进行余留的字符补充即可。

而如果知道删除完一轮都无法找到任何字符它的后续子串恰好为原始字符串开头的部分,那么我们也没有关系,总可以删完重排的。

因此,我们要做的就是求取每一个位置的后续子串与原始子串的最长公共头部序列,而这就是z算法要做的事情。

综上,我们先调用一次z算法之后用一个while循环遍历一边即可得到最终答案。

2. 代码实现

给出python代码实现如下:

def z_algorithm(s):
    n = len(s)
    z = [0 for _ in range(n)]
    l, r = -1, -1
    for i in range(1, n):
        if i > r:
            l, r = i, i
            while r < n and s[r-l] == s[r]:
                r += 1
            z[i] = r-l
            r -= 1
        else:
            k = i - l
            if z[k] < r - i + 1:
                z[i] = z[k]
            else:
                l = i
                while r < n and s[r-l] == s[r]:
                    r += 1
                z[i] = r-l
                r -= 1
    z[0] = n
    return z

class Solution:
    def minimumTimeToInitialState(self, word: str, k: int) -> int:
        z = z_algorithm(word)
        ans, idx, n = 0, 0, len(word)
        while True:
            idx += k
            ans += 1
            if idx >= n or z[idx] == n-idx:
                break
        return ans

提交代码评测得到:耗时538ms,占用内存21.2MB。


http://www.kler.cn/a/228298.html

相关文章:

  • SQL注入漏洞之基础数据类型注入 字符 数字 搜索 XX 以及靶场实例哟
  • java.sql.Date 弃用分析与替代方案
  • 怎样使用树莓派自己搭建一套ADS-B信号接收系统
  • 数据结构——实验一·线性表
  • U-Net - U型网络:用于图像分割的卷积神经网络
  • 靶机复现-pikachu靶机文件包含漏洞
  • DBA的节前紧急任务:一份全面的数据库自救指南
  • kubeadm部署k8s集群
  • Android BitmapShader setLocalMatrix缩放Bitmap高度重新onMeasure,Kotlin
  • 【教程】微服务使用Feign接口进行远程调用的步骤
  • 【分布式】雪花算法学习笔记
  • 从零开始 TensorRT(4)命令行工具篇:trtexec 基本功能
  • react和antd学习笔记
  • STM32--揭秘中断(简易土货版)
  • Qt 范例阅读: QStateMachine状态机框架 和 SCXML 引擎简单记录(方便后续有需求能想到这两个东西)
  • k8s学习-数据管理
  • Jmeter 01 -概述线程组
  • windows下docker的使用
  • STM32—系统定时器
  • 炸裂!可视化大模型内部架构的实用工具!
  • C#,雅各布斯塔尔—卢卡斯(Jacobsthal Lucas Number)的算法与源代码
  • Pytest 与allure测试报告集成
  • leetcode 3.无重复字符的最长字串(滑动窗口) (C++)DAY2
  • 目标检测及相关算法介绍
  • 逆向基础-破解密码
  • spring boot打完jar包后使用命令行启动,提示xxx.jar 中没有主清单属性