LeetCode - Easy - 28. Implement strStr()

Topic

Two Pointers, String

Description

https://leetcode.com/problems/implement-strstr/

Implement strStr().

Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

needle /?ni?dl/ n.針

haystack /?he?st?k/ n.干草堆

a needle in a haystack:something that is impossible or extremely difficult to find, especially because the area you have to search is too large(類似中文的“大海撈針”):

Finding the piece of paper I need in this huge pile of documents is like looking for/trying to find a needle in a haystack

Link

Clarification:

What should we return when needle is an empty string? This is a great question to ask during an interview.

For the purpose of this problem, we will return 0 when needle is an empty string. This is consistent to C’s strstr() and Java’s indexOf().

Example 1:

Input: haystack = "hello", needle = "ll"
Output: 2

Example 2:

Input: haystack = "aaaaa", needle = "bba"
Output: -1

Example 3:

Input: haystack = "", needle = ""
Output: 0

Constraints:

  • 0 <= haystack.length, needle.length <= 5 * 104
  • haystack and needle consist of only lower-case English characters.

Analysis

方法一:雙指針

方法二:KMP算法

Submission

public class ImplementStrStr {public int strStr(String haystack, String needle) {for (int i = 0;; i++) {for (int j = 0;; j++) {if (j == needle.length())return i;if (i + j == haystack.length())return -1;if (needle.charAt(j) != haystack.charAt(i + j))break;}}}private void getNext(int[] next, String s) {int j = -1;next[0] = j;for(int i = 1; i < s.length(); i++) { // 注意i從1開始while (j >= 0 && s.charAt(i) != s.charAt(j + 1)) { // 前后綴不相同了j = next[j]; // 向前回溯}if (s.charAt(i) == s.charAt(j + 1)) { // 找到相同的前后綴j++;}next[i] = j; // 將j(前綴的長度)賦給next[i]}}public int strStr2(String haystack, String needle) {if (needle.length() == 0) {return 0;}int[] next = new int[needle.length()];getNext(next, needle);int j = -1; // // 因為next數組里記錄的起始位置為-1for (int i = 0; i < haystack.length(); i++) { // 注意i就從0開始while(j >= 0 && haystack.charAt(i) != needle.charAt(j + 1)) { // 不匹配j = next[j]; // j 尋找之前匹配的位置}if (haystack.charAt(i) == needle.charAt(j + 1)) { // 匹配,j和i同時向后移動 j++; }if (j == (needle.length() - 1) ) { // 文本串s里出現了模式串treturn (i - needle.length() + 1); }}return -1;}}

Test

import static org.junit.Assert.*;
import org.junit.Test;public class ImplementStrStrTest {@Testpublic void test() {ImplementStrStr obj = new ImplementStrStr();assertEquals(2, obj.strStr("hello", "ll"));assertEquals(-1, obj.strStr("aaaaaa", "bba"));assertEquals(0, obj.strStr("", ""));assertEquals(-1, obj.strStr("aaa", "aaaa"));}@Testpublic void test2() {ImplementStrStr obj = new ImplementStrStr();assertEquals(2, obj.strStr2("hello", "ll"));assertEquals(-1, obj.strStr2("aaaaaa", "bba"));assertEquals(0, obj.strStr2("", ""));assertEquals(-1, obj.strStr2("aaa", "aaaa"));}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445821.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445821.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445821.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql item_MySQL源代碼:關于MySQL的Item對象

前篇介紹了MySQL如何從SQL語句轉換成一個內部對象。本文是前篇的延續&#xff0c;將更加詳細的介紹WHERE語句對應的Item對象。1. Item對象MySQL InternalMySQL Internals Manual較為詳細的介紹了Item對象。Item對象經常被稱作"thingamabob"(A thingamabob is a noun …

python的發展趨勢圖_用Python繪制趨勢圖

我在數據幀中有以下數據&#xff1a;-------------------------------------------------------| Physician Profile Id | Program Year | Value Of Interest |-------------------------------------------------------| 1004777 | 2013 | 83434288.00 || 1004777 | 2014 | 89…

mysql的實現類注解_Mybaits (XML方式:無需在寫Dao的實現類 注解方式:Dao的實現類與Mapper都可以不寫 重點理解)...

Maven的pom.xml 坐標配置4.0.0Mybatis_mavenday01_mbatis1.0-SNAPSHOTjarorg.mybatismybatis3.4.5mysqlmysql-connector-java5.1.45junitjunit4.12testorg.apache.maven.pluginsmaven-compiler-plugin2.3.21.81.8UTF-8mybatis的配置文件/p>PUBLIC "-//mybatis.org//DTD…

SQL字符串中單引號與換行符的轉義

問題 打算將文本文件內容添加至MySQL數據庫&#xff0c;則需要對文本中的單引號和換行符進行轉義&#xff0c;否則無法編寫合法的SQL。 解法 迭代文本文件的行時&#xff0c;將原行尾的換行符剔除掉&#xff0c;并拼接\\n;迭代文本文件的行時&#xff0c;將原行中的替換成。…

mysql 建庫字段_MySQL 的字段類型以及建庫策略

一、數字類型所謂的“數字類”&#xff0c;就是指 DECIMAL 和NUMERIC&#xff0c;它們是同一種類型。它嚴格的說不是一種數字類型&#xff0c;因為他們實際上是將數字以字符串形式保存的&#xff1b;他的值的每一位(包括小數點)占一個字節的存儲空間&#xff0c;因此這種類型耗…

mysql中建立text_mysql中text

一&#xff0c;char類型char列的長度固定為創建表時聲明的長度。長度可以為從0到255的任何值。當保存char值時&#xff0c;在它們的右邊填充空格以達到指定的長度。當檢索到char值時&#xff0c;尾部的空格被刪除掉。在存儲或檢索過程中不進行大小寫轉換。二&#xff0c;varcha…

前后分離接口規范

前后分離接口規范 隨著互聯網的高速發展&#xff0c;前端頁面的展示、交互體驗越來越靈活、炫麗&#xff0c;響應體驗也要求越來越高&#xff0c;后端服務的高并發、高可用、高性能、高擴展等特性的要求也愈加苛刻&#xff0c;從而導致前后端研發各自專注于自己擅長的領域深耕…

mysql proxy 悲觀鎖_mysql悲觀鎖總結和實踐

使用場景舉例&#xff1a;以MySQL InnoDB為例商品t_goods表中有一個字段status&#xff0c;status為1代表商品未被下單&#xff0c;status為2代表商品已經被下單&#xff0c;那么我們對某個商品下單時必須確保該商品status為1。假設商品的id為1。一、如果不采用鎖&#xff0c;那…

MySQL吉連_Learn Jdbc : Java, Jdbc, Odbc

Learn Jdbc : Java, Jdbc, Odbc 介紹Learn Jdbc : Java, Jdbc, OdbcLearn JDBC we precisely name what we are going to help you for Learning.As you are Beginner we keep in mind the same thing,we think like you and try to Build Apps Like Java Deep Learning,Java B…

python虛擬環境打包deb_可以為python腳本創建deb包嗎?

下面是python腳本源包的一個基本示例。雖然大多數打包教程都有點復雜&#xff0c;但如果遇到問題&#xff0c;它們確實可以幫助您。也就是說&#xff0c;我首先通過簡單地查看Debian包來學習Debian打包的基礎知識。獲取相似的源代碼并通過示例學習。在以下是您的基本源程序包布…

python順序結構實驗報告_Python 數據結構 之 串 的順序存儲結構

本文所采用的數據結構模板為 《數據結構教程》C語言版&#xff0c;李春葆、尹為民等著。改篇所涉及到的是 串 的順序存儲結構。用Python仿照C語言來實現。代碼地址&#xff1a;串 的順序存儲結構:# !/usr/bin/env python# -*- coding: utf-8 -*-__author__ MrHero""…

java五子棋源代碼_java 五子棋游戲源碼

【實例簡介】【實例截圖】【核心代碼】package game;import java.applet.Applet;import java.applet.AudioClip;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Container;import java.awt.FlowLayout;import java.awt.GridLayout;import java.awt.even…

java界面化_java怎么實現圖形化界面

展開全部java圖形化界面還62616964757a686964616fe78988e69d8331333363373232是有很多內容要學習的&#xff0c;可以參考 如下實例&#xff1a;public class Test extends JFrame{MyPanel mpnull;public static void main(String[] args){// TODO Auto-generated method stubTe…

java圖形用戶登錄界面_Java簡單登錄圖形界面

一.登錄界面1.程序代碼1 import java.awt.*;//導入awt包2 import javax.swing.*;//導入swing包3 import java.awt.event.ActionListener;//導入awt包中的監聽器事件包4 import java.awt.event.ActionEvent;//導入awt包中的ActionEvent事件包56 public class EnterScreen extend…

北大青鳥java y2_Struts-2 北大青鳥 Y2學年 項目案例使用 2框架開發租房網站 Java Develop 249萬源代碼下載- www.pudn.com...

文件名稱: Struts-2下載 收藏√ [5 4 3 2 1 ]開發工具: Java文件大小: 10225 KB上傳時間: 2016-01-03下載次數: 0提 供 者: 姜鵬詳細說明&#xff1a;北大青鳥 Y2學年 項目案例使用Struts 2框架開發租房網站-My English LOW文件列表(點擊判斷是否您需要的文件&#xff0c…

java int 包_int readInt()

int readInt()描述 (Description)java.io.ObjectInputStream.readInt()方法讀取32位int。聲明 (Declaration)以下是java.io.ObjectInputStream.readInt()方法的聲明。public int readInt()參數 (Parameters)NA返回值 (Return Value)此方法不返回值。異常 (Exception)EOFExcepti…

java i o是什么流_Java I/O流的總結

I/O的類結構圖I/O的分類根據處理的數據類型分為&#xff1a;字節流和字符流。根據數據流向分為&#xff1a;輸入流和輸出流。流又可分為節點流和處理流。節點流直接與數據源相連處理流與節點流一起使用&#xff0c;在節點流的基礎上&#xff0c;再嵌套一層。提高文件的讀取效率…

java i18n實例_Java國際化(i18n)格式化日期

本篇文章幫大家學習java國際化(i18n)格式化日期&#xff0c;包含了Java國際化(i18n)格式化日期使用方法、操作技巧、實例演示和注意事項&#xff0c;有一定的學習價值&#xff0c;大家可以用來參考。DateFormat類提供了各種格式來格式化日期。 以下是一些格式的列表。DateForma…

java placeholder_java – 如何在JTextfield中設置像Placeholder一樣的文本

我用來覆蓋文本字段繪制方法,直到我最終得到更多的自定義文本字段然后我真的想…然后我發現this prompt API易于使用,不需要你擴展任何組件.它還有一個很好的“伙伴”API這已經被包含在SwingLabs,SwingX library中,這使得它甚至可以使用……例如(這使用SwingX-1.6.4)import jav…

java web聊天室私聊map_java websocket聊天室示例(springboot)

【實例簡介】【實例截圖】【核心代碼】package com.example.demo;import java.io.IOException;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.ConcurrentHashMap;import javax.websocket.OnClose;import …