leetcode 28. 实现 strStr()(kmp)

实现 strStr() 函数。

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。

说明:

当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。

示例 1:

输入:haystack = “hello”, needle = “ll”
输出:2
示例 2:

输入:haystack = “aaaaa”, needle = “bba”
输出:-1
示例 3:

输入:haystack = “”, needle = “”
输出:0

解题思路

先生成next数值,再用模式串和目标串进行匹配,如果遇到不匹配的字母,则模式串的指针直接移到到next数值指向的位置,再次进行匹配,如果不匹配,再次进行相同的动作,直到j指针为0(即指向模式串的开头)或者字符匹配上了

代码

func strStr(haystack string, needle string) int {n,m:= len(haystack),len(needle)if m==0{return 0}next:=make([]int,m)for i,j := 1,0; i < m; i++ {for j>0&&needle[i]!=needle[j] {j=next[j-1]}if needle[i]==needle[j]{j++}next[i]=j}for i,j:= 0,0; i < n; i++ {for j>0&&needle[j]!=haystack[i] {j=next[j-1]}if needle[j]==haystack[i]{j++;}if j==m{return i-m+1}}return -1
}

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

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

相关文章

git 代码推送流程_Git 101:一个让您开始推送代码的Git工作流程

git 代码推送流程Im going to explain Git the way I wish someone had explained to me back when I was first learning. 我将以我希望有人在我第一次学习时向我解释的方式来解释Git。 Ill show how you can get started with just a few commands, and the concepts at wor…

多元时间序列回归模型_多元时间序列分析和预测:将向量自回归(VAR)模型应用于实际的多元数据集...

多元时间序列回归模型Multivariate Time Series Analysis多元时间序列分析 A univariate time series data contains only one single time-dependent variable while a multivariate time series data consists of multiple time-dependent variables. We generally use mult…

字符串基本操作

1.已知‘星期一星期二星期三星期四星期五星期六星期日 ’&#xff0c;输入数字&#xff08;1-7&#xff09;&#xff0c;输出相应的‘星期几 s星期一星期二星期三星期四星期五星期六星期日 d int(input(输入1-7:)) print(s[3*(d-1):3*d]) 2.输入学号&#xff0c;识别年级、专业…

linux:使用python脚本监控某个进程是否存在(不使用crontab)

背景&#xff1a; 需要每天定时去检测crontab进程是否启动&#xff0c;所以不能用crontab来启动检测脚本了&#xff0c;直接使用while 循环和sleep方式实现定时检测 # coding:utf-8 import os import send_message import datetime import timecurr_time datetime.datetime.no…

Go语言实战 : API服务器 (1) 技术选型

1. API是什么&#xff1f; API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;是一些预先定义的函数或者接口&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力&#xff0c;而又无须访问源码&#xf…

天猫客户端组件动态化方案——VirtualView 工具大更新

前文《天猫客户端组件动态化的方案——VirtualView 上手体验》都提到了自定义模板编译成二进制数据的过程&#xff0c;在 Android 版的 Playground 里内置了一个编译工具可以实时调测&#xff0c;然而业务开发过程中&#xff0c;不可能在手机上编译&#xff0c;而是在电脑或者后…

tableau可视化_如何在Tableau中构建自定义地图可视化

tableau可视化Sometime last year, I got fascinated with bubble charts when I saw a data visualization video, Hans Roslings 200 Countries, 200 Years, 4 Minutes - The Joy of Stats from BBC.去年的某个时候&#xff0c;当我看到一个数据可视化视频时&#xff0c;我迷…

数据分析和大数据哪个更吃香_处理数据,大数据甚至更大数据的17种策略

数据分析和大数据哪个更吃香Dealing with big data can be tricky. No one likes out of memory errors. ☹️ No one likes waiting for code to run. ⏳ No one likes leaving Python. &#x1f40d;处理大数据可能很棘手。 没有人喜欢内存不足错误。 No️没有人喜欢等待代码…

MySQL 数据还原

1.1还原使用mysqldump命令备份的数据库的语法如下&#xff1a; mysql -u root -p [dbname] < backup.sq 示例&#xff1a; mysql -u root -p < C:\backup.sql 1.2还原直接复制目录的备份 通过这种方式还原时&#xff0c;必须保证两个MySQL数据库的版本号是相同的。MyISAM…

test6

test6 转载于:https://www.cnblogs.com/Forever77/p/11474320.html

VueJs学习入门指引

新产品开发决定要用到vuejs&#xff0c;总结一个vuejs学习指引。 1.安装一个Node环境 去Nodejs官网下载windows版本node 下载地址&#xff1a; https://nodejs.org/zh-cn/ 2.使用node的npm工具搭建一个Vue项目&#xff0c;这里混合进入了ElementUI 搭建指引地址: https:…

粒子网格算法 pm_使粒子网格与Blynk一起使用的2种最佳方法

粒子网格算法 pmThis post is originally from my blog on www.jaredwolff.com.这篇文章最初来自我在www.jaredwolff.com上的博客。 Writing an app takes time. It takes even more time to write one that works with hardware.编写应用程序需要时间。 编写与硬件兼容的代码…

python:对list去重

1、set()方法 numbers [1,7,3,2,5,6,2,3,4,1,5] new_numbers list(set(numbers)) print new_numbers 输出 [1, 2, 3, 4, 5, 6, 7] 特点&#xff1a;不保证原有顺序 2、原始方法 numbers [1,7,3,2,5,6,2,3,4,1,5] new_numbers [] for x in numbers:if x not in new_numbers:…

运维工程师如果将web服务http专变为https

1&#xff1a;生成私钥 2&#xff1a;生成证书签署请求 3&#xff1a;在提供CA签署的web网站上&#xff0c;提交生成的证书签署请求 4&#xff1a;下载已经签署的CA证书 5&#xff1a;将证书的信息保留在web服务器中&#xff0c;且应用到提供web服务的软件即可转载于:https://w…

leetcode 363. 矩形区域不超过 K 的最大数值和

给你一个 m x n 的矩阵 matrix 和一个整数 k &#xff0c;找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。 题目数据保证总会存在一个数值和不超过 k 的矩形区域。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,0,1],[0,-2,3]], k 2 输出&#xff1a;2 解释&…

centos7.4二进制安装mysql

1&#xff1a;下载二进制安装包&#xff08;安装时确保没有mysql数据库服务器端&#xff09;&#xff1a; mariadb-10.2.12-linux-x86_64.tar.gz、 mariadb-10.2.12.tar.gz。2&#xff1a;创建系统账号指定shell类型&#xff08;默认自动创建同名的组&#xff09;3&#xff1a;…

批梯度下降 随机梯度下降_梯度下降及其变体快速指南

批梯度下降 随机梯度下降In this article, I am going to discuss the Gradient Descent algorithm. The next article will be in continuation of this article where I will discuss optimizers in neural networks. For understanding those optimizers it’s important to…

java作业 2.6

//程序猿&#xff1a;孔宏旭 2017.X.XX /**功能&#xff1a;在键盘输入一个三位数&#xff0c;求它们的各数位之和。 *1、使用Scanner关键字来实现从键盘输入的方法。 *2、使用取余的方法将各个数位提取出来。 *3、最后将得到的各个数位相加。 */ import java.util.Scanner; p…

ubuntu 16.04 挂载新硬盘

2、挂载数据盘 mkdir /datausrubuntu:~$ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 465.8G 0 disk sda1 8:1 0 512M 0 part /boot/efisda2 8:2 0 464.3G 0 part /sda3 8:3 0 976…

Go语言实战 : API服务器 (2) 运行流程

1.API服务器的总流程 分为两步&#xff1a; 启动API服务器API服务器对HTTP请求进行处理 2.API服务器启动流程 解析配置文件&#xff0c;利用配置文件完成对服务器的初始化配置初始化logger&#xff0c;开启日志记录与数据库建立连接设置http连接&#xff08;例如设置响应头…