【d35】【Java】【力扣】28. 找出字符串中第一個匹配項的下標

題目

給你兩個字符串?haystack?和?needle?,請你在?haystack?字符串中找出?needle?字符串的第一個匹配項的下標(下標從 0 開始)。如果?needle?不是?haystack?的一部分,則返回??-1?

示例 1:

輸入:haystack = "sadbutsad", needle = "sad"
輸出:0
解釋:"sad" 在下標 0 和 6 處匹配。
第一個匹配項的下標是 0 ,所以返回 0 。

示例 2:

輸入:haystack = "leetcode", needle = "leeto"
輸出:-1
解釋:"leeto" 沒有在 "leetcode" 中出現,所以返回 -1 。

提示:

  • 1 <= haystack.length, needle.length <= 104
  • haystack?和?needle?僅由小寫英文字符組成

思路

首先關于不同情況的分類:

1.haystack.length=needle.length:

為了能夠進入循環,

分為haystack.length=needle.length>2

和haystack.length=needle.length=1

2.haystack.length>needle.length:(這種情況兩個length都大于2)

3.haystack.length<needle.length(感覺沒有這種情況,暫時不考慮,以后改進)

綜合上面3個情況,能夠返回值不是-1 的情況有:

haystack.length=needle.length:

以及以下兩種,這兩種需要進入循環

haystack.length=needle.length>2

haystack.length>needle.length

具體思路:

定義nf=needle的第一個字符

遍歷haystack中的每一個字符,

如果遇到等于nf的字符,則從 這里開始判斷 是否有一個子串等于needle

如果有,返回i,如果沒有,返回-1

遇到等于nf的字符時,判斷 是否有一個子串等于needle,具體判斷方法:

在前面定義boolean ifEqualsNeedle = false,表示是否有等于needle的子串

使用雙指針,j指向haystack中的元素,k指向needle中的元素,

j和k的最大值判斷: j 從 i+1 開始,k從 1 開始,循環次數都是needle.length-1,

于是得到,j最大到<=i+needle.length()-1 ,

k最大到<neesle.length()

//雙指針//j表示haystack的下標,最小=i+1,最大到<=i+needle.length()-1//k表示needle的下標,最小=1,最大到<=neesle.length()-1int j = i + 1;int k = 1;while (k<needle.length()) {if (haystack.charAt(j) != needle.charAt(k))break;j++;k++;}if(k==needle.length())ifEqualsNeedle=true;else ;

代碼

public class Main {public static void main(String[] args) {System.out.println(strStr("mississippi", "issip"));}public static int strStr(String haystack, String needle) {int result = -1;//needle的第一個字符char nf = needle.charAt(0);//遍歷haystack,當某一個字符=nf時候,看后續是否都匹配//遍歷的終點 haystack.length()-needle.length(),// 因為這之后即使有“某一個字符=nf”,也不可能有等于needle的子串boolean ifEqualsNeedle = false;if (haystack.equals(needle)) {result = 0;} else {for (int i = 0; i <=haystack.length() - needle.length(); i++) {if (haystack.charAt(i) == nf) {//雙指針//j表示haystack的下標,最小=i+1,最大到<=i+needle.length()//k表示needle的下標,最小=1,最大到<neesle.length()int j = i + 1;int k = 1;while (k<needle.length()) {if (haystack.charAt(j) != needle.charAt(k))break;j++;k++;}if(k==needle.length())ifEqualsNeedle=true;else ;if (ifEqualsNeedle == true) {result = i;break;} else continue;} else ;}}return result;}
}

記錄


雖然目前沒必要追求這個,先做到能寫出來題目就行
但是還是挺開心的

?

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

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

相關文章

【大數據】通過 docker-compose 快速部署 MinIO 保姆級教程

文章目錄 一、概述二、MinIO 與 Ceph 對比1&#xff09;架構設計對比2&#xff09;數據一致性對比3&#xff09;部署和管理對比4&#xff09;生態系統和兼容性對比 三、前期準備1&#xff09;部署 docker2&#xff09;部署 docker-compose 四、創建網絡五、MinIO 編排部署1&…

【SQL】608. 樹節點(流控制語句 CASE + IF語句)

前述 知識點推薦學習&#xff1a; sql中的 IF 條件語句的用法 MySQL&#xff1a;if語句、if…else語句、case語句&#xff0c;使用方法解析 題目描述 leetcode 題目&#xff1a;608. 樹節點 思路 關鍵點&#xff1a;如何確定有沒有子節點 根節點&#xff1a;父節點為空內節…

基于Redo log Undo log的MySQL的崩潰恢復

基于Redo log & Undo log的MySQL的崩潰恢復 Redo log Undo log Redo log 重做日志,記錄,修改過的數據 Undo log 回滾日志,記錄修改之前的數據 兩個我不做詳細的介紹了,redo log就是記錄哪些地方被修改了 undo log是記錄修改之前我們的數據長什么樣 更新流程 我們來捋一…

python封裝,繼承,復寫詳解

目錄 1.封裝 2.繼承 復寫和使用父類成員 1.封裝 class phone:__voltage 0.5def __keepsinglecore(self):print("單核運行")def callby5g(self):if self.__voltage > 1:print("5g通話開啟")else:self.__keepsinglecore()print("不能開啟5g通…

Redis集群(主從)

1.主從集群 集群結構: 一.單機安裝redis 1.上傳壓縮包并解壓&#xff0c;編譯 tar -xzf redis-6.2.4.tar.gz cd redis-6.2.4 make && make install 2.修改redis.config的配置并啟動redis # 綁定地址&#xff0c;默認是127.0.0.1&#xff0c;會導致只能在本地訪問。…

Tomcat布署及優化-----JDK和Tomcat

1.Tomcat簡介 Tomcat 是 Java 語言開發的&#xff0c;Tomcat 服務器是一個免費的開放源代碼的 Web 應用服務器&#xff0c;Tomcat 屬于輕量級應用服務器&#xff0c;在中小型系統和并發訪問用戶不是很多的場合下被普遍使用&#xff0c;是開發和調試 JSP 程序的首選。一般來說&…

C++ //練習 10.2 重做上一題,但讀取string序列存入list中。

C Primer&#xff08;第5版&#xff09; 練習 10.2 練習 10.2 重做上一題&#xff0c;但讀取string序列存入list中。 環境&#xff1a;Linux Ubuntu&#xff08;云服務器&#xff09; 工具&#xff1a;vim 代碼塊 /******************************************************…

Vue前端加密后的數據發送到服務器端

首先&#xff0c;定義了一個名為 PUBLIC_KEY 的公鑰和一個名為 PRIVATE_KEY 的私鑰。然后&#xff0c;通過 JSEncrypt 創建了兩個實例 encrypt 和 decrypt&#xff0c;分別用于加密和解密操作。 對于加密操作&#xff0c;調用了 encrypt.setPublicKey() 方法設置公鑰&#xff…

升級Centos7的openssh到openssh-9.6p1版本 shell腳本 漏掃整改

升級Centos7的openssh到openssh-9.6p1版本 shell腳本 漏掃整改 #!/bin/bash# 聲明: 該腳本適用于升級Centos7的openssh到openssh-9.6p1版本# 定義源碼包版本號 OPENSSH_VERSIONopenssh-9.6p1 OPENSSL_VERSIONopenssl-3.2.1 ZILB_VERSIONzlib-1.3.1# 安裝編譯環境 yum -y insta…

【前端面試題5】利用 border 屬性畫一個三角形

舉例1&#xff1a;利用 border 屬性畫一個三角形&#xff08;小技巧&#xff09; 完整代碼如下&#xff1a; div{width: 0;height: 0;border: 50px solid transparent;border-top-color: red;border-bottom: none; }步驟如下&#xff1a; &#xff08;1&#xff09;當我們設…

【QT+QGIS跨平臺編譯】之五十六:【QGIS_CORE跨平臺編譯】—【qgsmeshcalclexer.cpp生成】

文章目錄 一、Flex二、生成來源三、構建過程一、Flex Flex (fast lexical analyser generator) 是 Lex 的另一個替代品。它經常和自由軟件 Bison 語法分析器生成器 一起使用。Flex 最初由 Vern Paxson 于 1987 年用 C 語言寫成。 “flex 是一個生成掃描器的工具,能夠識別文本中…

Android 拍照本地圖片選擇框架適配

前言 通常技術方案的選擇、會帶來后續一些不可控的東西&#xff0c;這也是沒法避免的&#xff0c;程序開發者中同時面對、測試、領導、產品各種要求。同時在網絡上查找的資料也只是很舊的&#xff0c;不一定適合新設備&#xff0c;需要推倒重新弄 1、解決方案通過意圖選擇器做…

day6 數組 嵌套循環

1&#xff1a;打印楊輝三角 91 int arr[6][6];92 int i,j0;93 for(i0;i<6;i)94 {95 for(j0;j<i;j) 96 {97 if(j0||ij)98 {99 arr[i][j]1; …

2024-3-4 如何寫出具有python風格的代碼

寫出具有python風格的代碼 什么是python風格如何寫出具有python風格的自定義數據類型 什么是python風格 python風格是指自定義的數據類型表現得得與內置類型一樣。比如&#xff0c;我創建了一個類&#xff0c;它的實例不用調用類的方法就可以實現迭代、切片&#xff0c;可以直…

推特API(Twitter API)對接說明,用戶code To Token換取

前期準備 提前準備、說明&#xff1a;目前對接推特api開發門戶分為3個版本&#xff0c;分別是免費的&#xff0c;100美金一個月的基礎版以及5000美金一個月的企業版&#xff0c;免費的目前就兩個接口可以調用&#xff0c;所以想要對接和使用推特最基本的也需要付100美元一個月…

百度百科人物創建要求是什么?

百度百科作為我國最大的中文百科全書&#xff0c;其收錄的人物詞條要求嚴謹、客觀、有權威性。那么&#xff0c;如何撰寫一篇高質量的人物詞條呢&#xff1f;本文伯樂網絡傳媒將從內容要求、注意事項以及創建流程與步驟三個方面進行詳細介紹。 一、內容要求 1. 基本信息&#…

什么是 web 應用的 type-ahead search help

在 Web 前端設計領域&#xff0c;type-ahead search help&#xff08;又稱為自動完成或即時搜索&#xff09;是一種用戶界面功能&#xff0c;它能夠在用戶輸入搜索詞的同時&#xff0c;實時提供搜索建議或結果。這種功能極大地提升了用戶體驗&#xff0c;因為它可以幫助用戶快速…

LeetCode每日一題【c++版】- 用隊列實現棧與用棧實現隊列

用隊列實現棧 題目描述 請你僅使用兩個隊列實現一個后入先出&#xff08;LIFO&#xff09;的棧&#xff0c;并支持普通棧的全部四種操作&#xff08;push、top、pop 和 empty&#xff09;。 實現 MyStack 類&#xff1a; void push(int x) 將元素 x 壓入棧頂。int pop() 移除…

Studio One 6永久激活版 附完整圖文安裝破解教程

Studio One 6是一款功能強大的音樂制作和錄音軟件&#xff0c;專為Mac操作系統設計。它提供了多軌錄音和混音、MIDI音樂制作、實時效果和處理、VST插件支持以及高級編輯和編排等豐富的功能。無論是專業音樂制作人還是音樂愛好者&#xff0c;都可以使用Studio One 6來創建和編輯…

程序員英語詞匯寶典(建議收藏)

很多小伙伴說&#xff0c;英文不好能不能學習編程&#xff0c;我個人的看法是英文不好&#xff0c;并不影響你學習編程&#xff0c;但有可能會影響到你的編程上限&#xff0c;因為一些最新的文檔都是英文的。如果你想成為一個編程大牛&#xff0c;那么英文還是很有必要的。今天…