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.pswp.cn/news/391380.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391380.shtml
英文地址,請注明出處:http://en.pswp.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;例如設置響應頭…