KMP刷leetcode速通

前言

KMP真厉害,刷题刷到 28.找出字符串中第一个匹配项的下标 和 1668.最大重复子字符串

next 数组用来匹配不上时,前缀 j j j 可以快速回退到 n e x t [ j − 1 ] next[j-1] next[j1] 的位置。

void getNext(vector<int>& next, const string& s) {
   int j = 0;  // 后缀
   // next[0] = 0;  // next初始化为 0
   for (int i = 1; i < s.size(); i++) {
       while (j > 0 && s[i] != s[j])
           j = next[j-1];  // 往回跳
       if (s[i] == s[j])
           j++;
       next[i] = j;   // 更新next数组
   }
}

题目

28 找出字符串中第一个匹配项的下标


模版题, getNext可以重复使用

class Solution {
public:
    void getNext(vector<int>& next, const string& s) {
        int j = 0;  // 后缀
        // next[0] = 0;  // next初始化为 0
        for (int i = 1; i < s.size(); i++) {
            while (j > 0 && s[i] != s[j])
                j = next[j-1];  // 往回跳
            if (s[i] == s[j])
                j++;
            next[i] = j;   // 更新next数组
        }
    }
    
    int strStr(string haystack, string needle) {
        // needle是子串
        if (haystack.size() == 0 || needle.size() == 0)
            return -1;
        
        vector<int> next(needle.size(), 0);
        // 构建 next 数组
        getNext(next, needle);

        int j = 0;
        for (int i = 0; i < haystack.size(); i++) {
            while (j > 0 && haystack[i] != needle[j])
                j = next[j-1];
            if (haystack[i] == needle[j])
                j++;
            if (j == needle.size())
                return i - j + 1;
        }
        return -1;
    }
};

1668 最大重复子字符串


KMP + 动态规划,很难想象这是 简单

class Solution {
public:
    void getNext(vector<int>& next, string s) {
        int j = 0;              // 后缀
        for (int i = 1; i < s.size(); i++) {
            while (j > 0 && s[i] != s[j])
                j = next[j - 1];  // 回退
            if (s[i] == s[j])
                j++;
            next[i] = j;
        }
    }

    int maxRepeating(string sequence, string word) {
        int n = sequence.size(), m = word.size();
        if (n < m)
            return 0;
        
        vector<int> next(m, 0);
        getNext(next, word);

        // 动态规划 dp[i]表示 sequence[0..i]最多有dp[i]个word
        vector<int> dp(n, 0); 
        int j = 0;
        for (int i = 0; i < sequence.size(); i++) {
            while(j > 0 && sequence[i] != word[j])
                j = next[j - 1];
            if (sequence[i] == word[j])
                j++;
                
            if (j == m) {  // 匹配上了开始 dp 操作
                if (i >= m)
                    dp[i] = dp[i - m] + 1;
                else
                    dp[i] = 1;
            }
        }

        int maxVal = 0;
        for (int val: dp)
            maxVal = max(maxVal, val);
        return maxVal;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/526404.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

我院组织《医务人员如何构建良好人际关系》主题讲座

为进一步规范医务人员行为&#xff0c;熟练运用沟通技巧&#xff0c;掌握沟通技能&#xff0c;更好的为患者服务&#xff0c;提高工作效率。3月7日&#xff0c;北京精诚博爱医院护理部特别邀请了原海军总医院心理科郭勇教授&#xff0c;为临床医务工作者作了《心理健康教育之医…

文本溢出隐藏用小点表示(多行溢出,单行溢出)

一、效果 文本溢出隐藏&#xff0c;用小点表示。 单行溢出隐藏&#xff1a; 规定第几行溢出隐藏&#xff1a; 二、代码 单行&#xff1a; <p class"p1">gdgFIAHfuiasdhgiubvsDIUGHSFUIGHGDFUIGUISDFHVUIJKDFDFUIKGJKGJKG</p> width: 200px; height:…

Docker 安装RabbitMQ以及使用客户端图形化界面

目录 一、点击进入docker 镜像仓库 1.1 直接在官网里 搜索 rabbitmq 1.2 在标签里 直接搜索3.10-management 因为这个标签包含用户操作界面 二、启动docker 2.1 首先拉取镜像&#xff1a; 2.2 Docker运行&#xff0c;并设置开机自启动 三、访问用户操作界面 一、点击进入…

项目经理要懂技术吗?

项目经理就好比乐团的指挥&#xff0c;指挥可能不需要精通每种乐器&#xff0c;但是指挥应该具备相应的音乐知识&#xff0c;对每种乐器有着自己的理解和经验&#xff0c;并且能够与乐队每个人进行专业上的沟通。而项目的专业性越强&#xff0c;对于项目经理的技术水平要求就越…

码住财务记账软件大揭秘!财务记账软件推荐指南

财务管理软件在现代企业管理中发挥着至关重要的作用。本篇文章将为大家介绍10款财务管理软件&#xff1a;Zoho Books、畅捷通T、速达财务软件、金税管家、QuickFile、Kashoo、AccountingSuite、Manager、金蝶KIS、Oracle NetSuite。 一、Zoho Books Zoho Books以其强大的功能…

Git-LFS 远程命令执行漏洞 CVE-2020-27955 漏洞复现

今天遇到了一个比较有意思的洞&#xff0c;复现一下下.......... 漏洞描述 Git LFS 是 Github 开发的一个 Git 的扩展&#xff0c;用于实现 Git 对大文件的支持 一些受影响的产品包括Git&#xff0c;GitHub CLI&#xff0c;GitHub Desktop&#xff0c;Visual Studio&#xff0…

Shoplazza闪耀Shoptalk 2024,新零售创新解决方案引领行业新篇章!

在近期举办的全球零售业瞩目盛事——Shoptalk 2024大会上,全球*的零售技术平台-店匠科技(Shoplazza)以其*的创新实力与前瞻的技术理念,成功吸引了与会者的广泛关注。此次盛会于3月17日至20日在拉斯维加斯曼德勒湾隆重举行,汇聚了逾万名行业精英。在这场零售业的盛大聚会上,Shop…

每日一题 第八十二期 CodeTON Round 8 (Div. 1 + Div. 2, Rated, Prizes!)

C1. Bessie’s Birthday Cake (Easy Version) time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard input output: standard output Proof Geometric Construction Can Solve All Love Affairs - manbo-p ⠀ This is the easy versio…

深度学习理论基础(四)Parser命令行参数模块

学习目录&#xff1a; 深度学习理论基础&#xff08;一&#xff09;Python及Torch基础篇 深度学习理论基础&#xff08;二&#xff09;深度神经网络DNN 深度学习理论基础&#xff08;三&#xff09;封装数据集及手写数字识别 深度学习理论基础&#xff08;四&#xff09;Parse…

【深入理解Java IO流0x05】Java缓冲流:为提高IO效率而生

1. 引言 我们都知道&#xff0c;内存与硬盘的交互是比较耗时的&#xff0c;因此适当得减少IO的操作次数&#xff0c;能提升整体的效率。 Java 的缓冲流是对字节流和字符流的一种封装&#xff08;装饰器模式&#xff0c;关于IO流中的一些设计模式&#xff0c;后续会再出博客来讲…

(css)el-tag标签,el-select多选框,el-cascader级联选框自定义样式

(css)el-tag标签&#xff0c;el-select多选框&#xff0c;el-cascader级联选框自定义样式 css: :root {--button-color: #065de0; }// 标签 .tagNew {margin-right: 20px;border-radius: 20px; }.el-tag.el-tag--info {background-color: var(--button-color);border-color: v…

【THM】Metasploit: Exploitation(利用)-初级渗透测试

介绍 在这个房间里,我们将学习如何使用Metasploit进行漏洞扫描和利用。我们还将介绍数据库功能如何使管理更广泛范围的渗透测试活动变得更容易。最后,我们将研究使用msfvenom生成有效负载以及如何在大多数目标平台上启动Meterpreter会话。 更具体地说,我们将讨论的主题是:…

如何实现OpenHarmony的OTA升级?

OTA简介 随着设备系统日新月异&#xff0c;用户如何及时获取系统的更新&#xff0c;体验新版本带来的新的体验&#xff0c;以及提升系统的稳定性和安全性成为了每个厂商都面临的严峻问题。OTA&#xff08;Over the Air&#xff09;提供对设备远程升级的能力。升级子系统对用户…

字母大小写转换(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;char c1 A;char c2 0;//实现大小写转换&#xff1b;c2 c1 32;//输出结果&#xff1b;printf("c2的编码是&…

Springboot实现OCR(文字识别),最新教程!linux版

前言 不用引入什么dll&#xff0c;以及各种乱七八糟的东西。不废话&#xff0c;直接开始教程&#xff01;没有过多讲解里面的知识点&#xff0c;如有需要详细了解请加Qq:1101165230 1、Linux下安装与使用 1.1 安装tesseract&#xff08;复制粘贴敲回车&#xff0c;中间输入Y&…

SOLIDWORKS图像品质设置对文件大小和系统性能的影响

SOLIDWORKS图像品质设置对文件大小和系统性能的影响非常大。不同的模型外形对整体性能是否也会有影响呢&#xff1f;因此我们会使用4种基本形状&#xff1a;立方体、圆柱体、球体和圆环来进行一系列的测试。 这个测试内容&#xff0c;就是通过调整“图像品质”选项设置中的不同…

iOS:如何安全且优雅地操控数组元素

前言 在 iOS 开发的世界里&#xff0c;数组(Array)的操作频率高得令人咋舌。数组贯穿于我们每一个功能的实现和每一行代码的编写之中&#xff0c;一手托起了数据结构的半边天。但这位工具之王&#xff0c;有时候也会变身为导致程序崩溃的罪魁祸首。当访问越界&#xff0c;当插…

Mysql主键优化之页分裂与页合并

主键设计原则 满足业务需求的情况下&#xff0c;尽量降低主键的长度。因为如果主键太长&#xff0c;在多个二级索引中&#xff0c;主键索引值所占用的空间就会过大。 插入数据时&#xff0c;尽量选择顺序插入&#xff0c;选择使用AUTO_INCREMENT自增主键。因为乱序插入会导致页…

STM32 F401/411外设内部互联矩阵摘要

STM32 F401/411外设内部互联矩阵摘要 &#x1f4cd;参考文档AN4646&#xff1a;https://www.stmcu.com.cn/Designresource/detail/localization_document/709908(中译) -&#x1f4cc; 相关工程案例《HAL STM32主从定时器联级使用》、《STM32G4 TIM1触发ADC转换》 &#x1f4d…

Qt+VS2019中使用QAxObject时的环境配置

在纯Qt中 在.pro中添加axcontainer模块即可 而VSqt中&#xff1a; 特别傻的是&#xff1a;我运行的是release&#xff0c;但配置的是debug的属性页&#xff0c;一直报错&#xff0c;人都傻了。 最后发现果然是人傻。