字符串-字符串匹配

2023-05-16

Leetcode 28题

1、题目描述

# Given two strings needle and haystack, return the index of the first 
# occurrence of needle in haystack, or -1 if needle is not part of haystack. 
# 
#  
#  Example 1: 
# 
#  
# Input: haystack = "sadbutsad", needle = "sad"
# Output: 0
# Explanation: "sad" occurs at index 0 and 6.
# The first occurrence is at index 0, so we return 0.
#  
# 
#  Example 2: 
# 
#  
# Input: haystack = "leetcode", needle = "leeto"
# Output: -1
# Explanation: "leeto" did not occur in "leetcode", so we return -1.
#  
# 
#  
#  Constraints: 
# 
#  
#  1 <= haystack.length, needle.length <= 10⁴ 
#  haystack and needle consist of only lowercase English characters. 

2、代码实现

class Solution:
    def next(self, needle):
        next_arr = [0] * (len(needle) + 1)
        i = 0
        j = 1
        next_arr[0] = -1
        while j < len(needle):
            if i == -1 or needle[i] == needle[j]:
                i += 1
                j += 1
                next_arr[j] = i
            else:
                i = next_arr[i]
        return next_arr

    def strStr(self, haystack: str, needle: str) -> int:
        next_arr = self.next(needle)
        i = 0
        j = 0
        ix = -1
        while i < len(needle) and j < len(haystack):
            if i == -1 or needle[i] == haystack[j]:
                i += 1
                j += 1
            else:
                while i != -1 and needle[i] != haystack[j]:
                    i = next_arr[i]
        if i == len(needle):
            ix = j-len(needle)
        return ix


# leetcode submit region end(Prohibit modification and deletion)


if __name__ == '__main__':
    so = Solution()
    needle = "abcabcmn"
    haystack = "abcababcabcmncabcmn"
    res = so.strStr(haystack, needle)
    print(res)

3、解题思路

  • next数组的构建和匹配的过程都采用双指针的策略。
  • 构建next数组,next数组的含义是指记录首位固定的情况下,当前字符之前的最长公共子串的长度。
  • next数组用一个while循环就可以实现,如果存在回溯的情况j指针不会移动。
  • 在匹配的过程中,如果不匹配要进行回溯。

4、next数组

  • 假设模式串是abcabeeeabcabcmncabcmn,abcabe和abcabc匹配时,e和c不匹配。
  • 但是abcabe和abcabc存在公共相同的子串abcababcab也存在公共子串ab
  • abcabe和abcabc中的ab子串都相同,所以直接使用abcabeeeabcabcmncabcmn匹配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字符串-字符串匹配 的相关文章

  • 使用VNC远程登录百度智能云服务器

    使用VNC服务远程登录对浏览器有一定的要求 xff0c 现在只支持如下版本的浏览器 xff0c 使用之前注意VNC页面的提示 浏览器名称版本Google Chrome16 43 Firefox3 6 43 iOS Safari6 1 43
  • Linux环境下为普通用户添加sudo权限

    系统环境 xff1a Centos6 5 1 背景 xff1a sudo是Linux系统管理指令 xff0c 是允许系统管理员让普通用户执行一些或者全部root命令的一个工具 Linux系统下 xff0c 为了安全 xff0c 一般来说我们
  • 利用jquery实现当前时间动态显示

    html代码 xff1a lt div id 61 34 time 34 gt lt div gt jQuery代码 lt script type 61 34 text javascript 34 gt setInterval functi
  • Turtlebot3 Gazebo仿真环境下深度强化学习DQN开发环境构建

    1 Anaconda2 安装 2 Tensorflow安装 ubuntu18系统anaconda安装tensorflow qq 39429669的博客 CSDN博客 3 下载并编译源码 本文先使用github中开源的机器学习的源码进行学习
  • Python数据挖掘 - 第一部分

    文章目录 第一章 数据挖掘库的安装第二章 Matplotlib2 1 matplotlib简介2 2 折线图 xff08 plot xff09 与基础绘图功能2 3 散点图 xff08 scatter xff09 2 4 柱状图 xff08
  • TortoiseGit解决冲突

    TortoiseGit解决冲突 问题概述场景重现解决冲突 问题概述 在项目实施过程中 xff0c 多人维护同一份文件或代码时经常会在本地Commit完再从远程仓库Pull时出现冲突 这时需要保留自己的内容 xff0c 同时也保留远程仓库原来
  • axios的简单封装

    前言 在每次使用原装的axios发送 http请求时 如果需要token验证 xff0c 则都需要创建拦截器 xff0c 添加 39 token 39 请求头 xff0c 或者在config中具体的请求体中添加 xff0c 是一个非常麻烦的
  • 【操作系统】RT-Thread 入门学习

    一 嵌入式操作系统 1 1 软实时与硬实时 强实时操作系统 xff1a 严格限定在规定时间内完成任务 xff0c 否则就会导致灾难性的发生 xff0c 例如导弹拦截系统 汽车引擎系统等 弱实时操作系统 xff1a 可以允许偶尔出现一定的时间
  • windows10安装NVIDIA显卡驱动+cuda10.0教程

    windows10安装NVIDIA显卡驱动 43 cuda10 0教程 1 安装个鲁大师2 确定本机是否支持GPU加速3 更换至匹配的显卡驱动4 下载和安装cuda和cudnn5 验证6 游戏加速7 分享个漂亮的壁纸 1 安装个鲁大师 查看
  • 生成小批量数据集

    shell脚本随机筛选一个目录下后缀为2 4 6 8的 mp4文件 span class token function find span mnt sdb dataset 20181217 RX5 zheA5MV46 name mp4 sp
  • mapreduce二次排序案例

    为什么需要二次排序 在MapReduce操作时 xff0c 我们知道传递的 lt key value gt 会按照key的大小进行排序 xff0c 最后输出的结果是按照key排过序的 有的时候我们在key排序的基础上 xff0c 对valu
  • 浏览器缓存致使修改的样式不生效,解决方式

    我们使用缓存的资源越多 xff0c 网站的响应能力和性能就会越好 为了优化缓存 xff0c 过期时间设置得尽量长是一种很好的策略 对于定期或者频繁更新的资源 xff0c 这么做是比较稳妥的 xff0c 但是对于那些长期不更新的资源会有点问题
  • 数据清洗的步骤

    1 数据清洗的基本过程 S1 xff1a 数据分析 在数据清洗之前 xff0c 对数据分析 xff0c 对数据质量问题有更为详细的了解 xff0c 从而选择更好的清洗方案 S2 xff1a 定义清洗规则 通过数据分析 xff0c 掌握了数据
  • html前端之css绘制形状

    纯CSS绘制的图形 xff0c 有最简单的矩形 圆形和三角形 xff0c 也有各种常见的多边形 xff0c 甚至是阴阳太极和网站小图标 xff0c 非常强大 Square 正方形 square width 100px height 100p
  • 解决docker 运行standard_init_linux.go:219: exec user process caused: exec format error报错

    使用mac M1 build image 在linux上运行会报standard init linux go 219 exec user process caused exec format error 这个问题出现的主要原因是golang
  • 解决upstream prematurely closed connection while reading response header from upstream问题(nginx)

    问题描述 xff1a 使用docker部署了前端和nginx 前端有需求要使用websocket 所以在nginx中配置了websocket转发 xff0c 配置如图 xff1a server listen 80 server name 1
  • 解决Cannot start service XX: OCI runtime create failed: container_linux.go:348问题

    问题描述 xff1a 最近在做一个国际化方案的时候 xff0c 发现使用envsubst动态更改nginx模板中变量会报错 xff0c 但是直接在镜像执行envsubst的命令是没有问题的 ERROR for doge viewer dr
  • nginx location使用问题记录

    问题描述 想通过nginx实现一个功能 xff1a 当前缀为 app aaa或者是 app bbb的时候 xff0c 将其转发到front aaa或者front bbb xff0c nginx配置如下 xff1a span class to
  • 使用auto-gpt来写一篇技术文章(如何部署autogpt+遇到的问题+如何使用)

    文章目录 前言一 autogpt本地部署1 clone代码2 启动虚拟环境3 运行项目 二 使用aotogpt生成文章1 人设描述2 设置目标3 文章的生成过程4 文章的生成内容 总结 前言 最近AI技术的发展非常迅猛 xff0c 尤其是和
  • 如何使用bingChat(使用方法+遇到的问题+感受)

    文章目录 前言一 如何使用Bing Chat1 下载new Bing2 重新注册一个microsoft xff08 此步骤可略过 xff0c 如有问题再操作此步骤 xff09 3 使用 Bing Chat 二 常见问题1 Chat mode

随机推荐

  • MapReduce编程模型

    如图所示 xff0c 上图就是mapreduce的编程模型 MapReduce的流程分为5个阶段 xff1a 输入文件 gt Map gt 中间文件 gt Reduce阶段 gt 输出文件 步骤1 启动子进程 xff1a 用户程序会启动两类
  • 安装mysql8.0 https://dl.bintray.com/ 网址被禁用问题

    安装mysql8 0下载不了https dl bintray com 的文件 需要自己下载boost 1 70 0 tar gz文件 xff0c 亲测可用 链接 xff1a https pan baidu com s 1qyeQ6Qfexg
  • keil5仿真相关配置,解决相关bug

    一 keil5仿真时 xff0c 添加动态数值至观察窗口 xff08 watch X xff09 xff0c 但是值不变化或提示错误 原因分析 xff1a 1 1 未将观察的变量配置为全局变量 xff0c 需要将观察的变量配置为全局变量 x
  • 查看vs支持的c#语言版本/查看.NetCore版本/更改c#语言版本

    1 查看vs支持的c 版本 注意语言版本控制 官网解释 Windows 10 选择 开始 键盘上的 Windows 徽标键 并滚动到字母 V 展开 Visual Studio 2019 文件夹 选择 VS 2019 开发人员命令提示 xff
  • Yum项目上线实战(网站运维)

    项目上线 一 编译安装与卸载Nginx二 关于LAMP三 LAMP环境部署 一 编译安装与卸载Nginx Nginx xff1a 是一款比较流行的web服务器软件 xff0c 类似于Apache 1 安装nginx 下载nginx ngin
  • elment ui 全部报错,参数不能赋给类型“App<any> ,怀疑是插件更新的原因

    elment组件全部报错 xff0c 的参数不能赋给类型 App lt any gt amp xff0c 有一样的情况的吗 xff0c 目前怀疑是插件更新的原因
  • mybatis-plus-boot-starter 引用不了包BaseMapper

    我的解决办法是 xff1a 调整版本号到3 2 0 lt dependency gt lt groupId gt com baomidou lt groupId gt lt artifactId gt mybatis plus boot s
  • Unrecognized option: --Xmx5120m

    Container exited with a non zero exit code 1 Error file prelaunch err Last 4096 bytes of prelaunch err Last 4096 bytes o
  • 廖雪峰Python教程之mapreduce

    1 map 函数 map 函数接收两个参数 xff0c 一个是函数 xff0c 一个是Iterable xff0c map将传入的函数依次作用到序列的每个元素 xff0c 并把结果作为新的Iterator返回 def f x return
  • 正则基础知识

    正则 RegExp xff1a 由相关元字符和修饰符组成的一个规则 xff0c 匹配 验证和捕获 xff08 只用来处理字符串 xff09 可以理解为两个斜杠中间包含一些内容就是正则 元字符 xff1a 元字符 两个斜杠之间包起来的内容 正
  • The packaging for this project did not assign a file to the build artifact 问题解决

    1 问题出现场景 新建一个Java工程 xff0c 添加testng依赖文件 xff0c 准备使用mvn install安装testng工具时 xff0c 点击如下图1 xff0c 发生以下报错信息图2 xff0c The packagin
  • vscode连接服务器免密码登录

    在windows环境下 xff0c 有时候需要用到linux平台开发 xff0c 如果用Ubuntu虚拟机的话 xff0c 用起来很不习惯 xff0c 不方便切换到windows界面 xff0c 可以把代码放到服务器上 xff0c 用vs
  • kubectl安装无法连接packages.cloud.google.com

    1 问题描述 Err 4 https packages cloud google com apt kubernetes xenial InRelease Could not connect to packages cloud google
  • Centos8-stream安装PostgreSQL13

    一 安装postgresql13 server yum span class token function install span y https download postgresql org pub repos yum reporpm
  • ttf文件结构解析

    TrueType字体通常包含在单个TrueType字体文件中 xff0c 其文件后缀为 TTF OpenType字体是以类似 于TrueType字体的格式编码的POSTSCRIPT字体 OPENTYPE字体使用 OTF文件后缀 OPENTY
  • centos卸载软件三种方式

    1 我们来卸载用yum安装的软件 xff1a yum remove 软件名字 xff1b 2 如果是用rpm包安装的软件呢 xff0c 则使用如图命令进行卸载 xff1b rpm e 软件名 xff1b 3 如果是用tar包安装的软件呢 x
  • Pycharm设置http代理

    1 Pycharm设置 2 urllib下载数据配置 span class token keyword from span urllib span class token punctuation span error span class
  • Docker 配置网络代理

    有时因为网络原因 xff0c 比如公司 NAT xff0c 或其它啥的 xff0c 需要使用代理 Docker 的代理配置 xff0c 略显复杂 xff0c 因为有三种场景 但基本原理都是一致的 xff0c 都是利用 Linux 的 htt
  • 安装 OpenVPN 客户端

    安装 OpenVPN 客户端 yum y span class token function install span epel release yum y span class token function install span op
  • 字符串-字符串匹配

    Leetcode 28题 1 题目描述 Given two strings needle and haystack return the index of the first occurrence of needle in haystack