Day22 代码随想录打卡|字符串篇---实现 strStr()

news2025/1/16 4:46:06

题目(leecode T28):

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回  -1 

方法:KMP算法

KMP算是是字符串匹配问题的常用方法,他解决的是暴力匹配所带来的时间复杂度极高的弊端。当我们在暴力匹配字符串时,如果模式串和文本串不匹配时,我们需要从下一个文本串的字符开始从头匹配模式串,但KMP算法引入了一个next数组来解决这个问题。next数组中存放的是模式串的最长相等前后缀,它可以告诉模式串在当前位置匹配不成功后的下一个匹配的位置在哪,其实这个位置就是模式串的最长的公共前后缀中最大的位置,从该位置继续匹配

class Solution {
public:
    void getNext(int* next, const string& s) {       //计算next数组
        int j = 0;
        next[0] = 0;
        for(int i = 1; i < s.size(); i++) {          //遍历字符串s吗,求其最长相等前后缀
            while (j > 0 && s[i] != s[j]) {
                j = next[j - 1];
            }
            if (s[i] == s[j]) {
                j++;
            }
            next[i] = j;
        }
    }
    int strStr(string haystack, string needle) {
        if (needle.size() == 0) {                   //定义如果模式串为空则返回0
            return 0;
        }
        vector<int> next(needle.size());
        getNext(&next[0], 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 - needle.size() + 1);
            }
        }
        return -1;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab实现分段函数拟合(分段点未知)| 源码分享 | 视频教程 | 三种分段函数拟合方法

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法&#xff0c;并提供所有案例完整源码&#xff1b;2.…

2024vue官方生态最全整理

👩 个人主页:程序媛夏天 🙋‍♂️ 作者简介:前端领域新星创作者、CSDN内容合伙人、自媒体职场博主,专注于前端各领域技术,成长的路上共同学习共同进步,一起加油呀! ✨系列专栏:前端面试宝典、JavaScript进阶、vue实战 📢 资料领取:前端进阶资料以及文中源码可以在…

解放双手,利用自动点赞软件提高曝光度

在数字时代&#xff0c;社交媒体如同一片繁茂的森林&#xff0c;每一条动态、每一张照片都是树上挂着的果实&#xff0c;而点赞则仿佛是那些吸引眼球的色彩。在这个以流量为王的网络世界里&#xff0c;点赞数往往与内容的可见度直接相关&#xff0c;它不仅能够增加帖子的权重&a…

Python 框架安全:Django SQL注入漏洞测试.(CVE-2021-35042)

什么是 Django 框架 Django 是一个用 Python 编写的 Web 应用程序框架。它提供了许多工具和库&#xff0c;使得开发 Web 应用程序变得更加容易和高效。Django 遵循了“MTV”&#xff08;模型-模板-视图&#xff09;的设计模式&#xff0c;将应用程序的不同组件分离开来&#x…

【Git】Git学习-16:git merge,且解决合并冲突

学习视频链接&#xff1a; 【GeekHour】一小时Git教程_哔哩哔哩_bilibili​编辑https://www.bilibili.com/video/BV1HM411377j/?vd_source95dda35ac10d1ae6785cc7006f365780 1 创建分支dev&#xff0c;并用merge合并master分支&#xff0c;使dev分支合并上master分支中内容为…

减速机齿数速算

1.齿轮相关参数 1.1 模数 &#xff0c; 因为 齿数*齿距 Pi*直径 所以&#xff1a;直径/齿数 齿距/PI 模数 国标现行标准&#xff08;截止2024/5&#xff09;是&#xff1a; GB/ 1357-2008 / ISO 54-1996 模数有国标的一个序列标准&#xff1a; 1.2.轴径 轴径的国标是&a…

【OceanBase 系列】—— OceanBase v4.3 特性解读:查询性能提升之利器列存储引擎

原文链接&#xff1a;OceanBase 社区 对于分析类查询&#xff0c;列存可以极大地提升查询性能&#xff0c;也是 OceanBase 做好 HTAP 和 OLAP 的一项不可缺少的特性。本文介绍 OceanBase 列存的实现特色。 OceanBase从诞生起就一直坚持LSM-Tree架构&#xff0c;不断打磨功能支…

智慧公厕方案_智慧公厕解决方案_智慧公厕整体解决方案_智慧公厕系统_智慧公厕管理系统

随着智能科技的不断发展&#xff0c;智慧公厕已经成为城市建设的重要组成部分。智慧公厕系统以其高效、智能、便捷的特点&#xff0c;受到了人们的广泛关注和好评。本文将以智慧公厕源头实力厂家广州中期科技有限公司&#xff0c;大量精品案例项目现场实景实图实例&#xff0c;…

源代码烧录场景防泄密的四种方式

在各行各业中&#xff0c;外设烧录是一项常见的操作&#xff0c;涉及到对硬件设备进行固件更新或配置文件的写入。然而&#xff0c;外设烧录过程中的文件管理和安全审计一直是一个挑战&#xff0c;传统的烧录方法往往无法提供足够的安全保障。本文将介绍如何利用沙盒防泄密软件…

【驱动】I2C读写时序

1、I2C总线 I2C使用两条线在主控制器和从机之间通信,SCL(串行时钟线)和SDA(串行数据线),这两条线需接5~10欧上拉电阻,总线空闲空闲时,SCL和SDA处于高电平,I2C总线标准模式速度可以达到100K/S,快速模式可以达到400K/S。 2、状态 I2C总线有四种状态:空闲、启动、忙碌、…

【MM32F3270火龙果】keil安装MM32F3270

文章目录 前言一、下载pack包二、安装pack三、keil选择MM32F3270 cpu四、编译烧写总结 前言 在嵌入式系统开发中&#xff0c;选择适合的开发工具和微控制器平台至关重要。本文将介绍如何在Keil开发环境中安装和配置MM32F3270火龙果微控制器的开发环境。MM32F3270火龙果是一款功…

Java_从入门到JavaEE_11

一、抽象类及抽象方法 1.认识抽象类及抽象方法 应用场景&#xff1a;当一个方法必须在父类中出现&#xff0c;但是这个方法又不好实现&#xff0c;就把该方法变成抽象方法&#xff0c;交给非抽象的子类去实现 实例&#xff1a; //抽象类 public abstract class 类名{//抽象方…

svg画扇形进度动画

有人问下面这种图好怎么画&#xff1f;svg 想了下&#xff0c;确实用svg可以&#xff0c;可以这么设计 外层是一个容器放置内容&#xff0c;并且设置overflow:hidden&#xff0c; 内层放一个半径大于容器宽高一半的svg&#xff0c;并定位居中&#xff0c;然后svg画扇形&#x…

STM32系统架构

以下是STM32系统架构中的各个重要组件和功能&#xff1a; 组件描述Cortex-M内核ARM Cortex-M系列内核&#xff0c;如M0、M0、M3、M4、M7等Flash存储器存储程序代码和数据SRAM存储程序运行时数据和堆栈外设接口GPIO、SPI、I2C、UART、TIM、ADC、DAC、USB、CAN、Ethernet等时钟和…

同一局域网如何从Windows系统拷贝文件到银河麒麟系统

1. 先将Windows下的、被拷贝文件所在文件夹设置为共享目录&#xff1a;在文件夹上单击右键选择“属性”菜单&#xff0c;弹出如下对话框&#xff1a; 按数字顺序单击鼠标左键&#xff0c;弹出如下对话框&#xff1a; 并将权限开放为Everyone&#xff0c;单击“共享”按钮。 在…

sed小实践2(随手记)

删除/etc/passwd的第一个字符 #本质是利用sg替换&#xff0c;将第一个字符替换成空 sed s|^.||g /etc/passwd删除/etc/passwd的第二个字符 sed -r s|^(.).(.*$)|\1\2|g /etc/passwd sed -r s|^(.).|\1|g /etc/passwd删除/etc/passwd的最后一个字符 sed s|.$||g /etc/passwd删…

解决docker安装Wordpress速度过慢的问题

先可以在dockerhub上查看Wordpress的详情&#xff1a; Dockerhttps://hub.docker.com/search?qwordpress 具体速度慢的问题如下&#xff1a; 现在打开docker右上角的设置图标&#xff0c;并进入docker engine&#xff0c;添加如下代码&#xff1a; "registry-mirrors&…

智慧生活:AI工具如何改变我们的工作与生活

文章目录 &#x1f4d1;前言一、常用AI工具&#xff1a;便利与高效的结合1.1 语音助手1.2 智能推荐系统1.3 自然语言处理工具 二、创新AI应用&#xff1a;不断突破与发展2.1 医疗诊断AI2.2 智能家居2.3 无人驾驶技术 三、AI工具在人们生活中的应用和影响3.1 生活方式的变化3.2 …

The Lost Door

下载下来是一个exe文件 __int64 __fastcall check(char *a1) {char v1; // alchar v3[32]; // [rsp20h] [rbp-60h] BYREF_DWORD v4[8]; // [rsp40h] [rbp-40h] BYREF__int64 v5; // [rsp60h] [rbp-20h]__int64 v6; // [rsp68h] [rbp-18h]__int64 v7; // [rsp70h] [rbp-10h]__i…

Baidu Comate——AI时代的软件开发利器

目录 Comate产品介绍 1.产品背景 ​编辑 2.产品优势 3.产品特性 4. 支持开发环境及语言 5.使用场景 Comate产品体验 Comate场景应用 2.快捷键的使用 专业插件体验 1.行间注释 2. 代码优化 3.解释说明代码 4.调优建议 5.AutoWork Comate实测体验感受 Comate产品介绍…