国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Leecode找出字符串中第一個匹配項的下標(biāo) 即實現(xiàn)strSTR()函數(shù)

這篇具有很好參考價值的文章主要介紹了Leecode找出字符串中第一個匹配項的下標(biāo) 即實現(xiàn)strSTR()函數(shù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

簡單介紹該函數(shù)的作用

? ? ? ? 在我們?nèi)ビ藐P(guān)鍵詞查找微信或者qq聊天記錄的時候,我們總不能一句一句去找吧。我們需要用到的功能底層大概是此博客所講的這個函數(shù)熬。

一.算法需要傳入的參數(shù)和返回類型

? ? ? ? 需要傳入的就是關(guān)鍵詞和所有的文本,返回的是當(dāng)前關(guān)鍵詞出現(xiàn)的首個位置。

二.字符串匹配的方法(KMP算法)

? ? ? ? 在查找字符串的時候,有時不需要每次都從頭再來。我們偶爾需要抄抄近路,從當(dāng)前已知的結(jié)果提取信息。所以,我們的next[]數(shù)組出現(xiàn)了。

? ? ? ? 那什么是KMP呢?

????????????????這三位學(xué)者發(fā)明的:Knuth,Morris和Pratt,所以取了三位學(xué)者名字的首字母。所以叫做KMP。

? ? ? ? 那什么是next[]呢(回退表)?

????????????????前綴表是用來回退的,它記錄了模式串與主串(文本串)不匹配的時候,模式串應(yīng)該從哪里開始重新匹配。

? ? ? ? 那一個前綴表是如何記錄我們要跳到哪個位置去的呢?

????????????????前綴表的任務(wù)是當(dāng)前位置匹配失敗,找到之前已經(jīng)匹配上的位置,再重新匹配,此也意味著在某個字符失配時,前綴表會告訴你下一步匹配中,模式串應(yīng)該跳到哪個位置。

三.算法的實現(xiàn)

? ? ? ? 1.前綴表的實現(xiàn):? ? ? ? ??

????????2.核心代碼

四.生成前綴表的筆者自己理解的方法

? ? ? ? 就是尋找在當(dāng)前字符是否是與原字符串起始位置相同,如果是相同的那就是1,但如果該字符左側(cè)就是已經(jīng)匹配過的片段,那直接加1后判斷下一個字符,比如下面的next[]


簡單介紹該函數(shù)的作用

? ? ? ? 在我們?nèi)ビ藐P(guān)鍵詞查找微信或者qq聊天記錄的時候,我們總不能一句一句去找吧。我們需要用到的功能底層大概是此博客所講的這個函數(shù)熬。

一.算法需要傳入的參數(shù)和返回類型

? ? ? ? 需要傳入的就是關(guān)鍵詞和所有的文本,返回的是當(dāng)前關(guān)鍵詞出現(xiàn)的首個位置。

二.字符串匹配的方法(KMP算法)

? ? ? ? 在查找字符串的時候,有時不需要每次都從頭再來。我們偶爾需要抄抄近路,從當(dāng)前已知的結(jié)果提取信息。所以,我們的next[]數(shù)組出現(xiàn)了。

? ? ? ? 那什么是KMP呢?

????????????????這三位學(xué)者發(fā)明的:Knuth,Morris和Pratt,所以取了三位學(xué)者名字的首字母。所以叫做KMP。

? ? ? ? 那什么是next[]呢(回退表)?

????????????????前綴表是用來回退的,它記錄了模式串與主串(文本串)不匹配的時候,模式串應(yīng)該從哪里開始重新匹配。

? ? ? ? 那一個前綴表是如何記錄我們要跳到哪個位置去的呢?

????????????????前綴表的任務(wù)是當(dāng)前位置匹配失敗,找到之前已經(jīng)匹配上的位置,再重新匹配,此也意味著在某個字符失配時,前綴表會告訴你下一步匹配中,模式串應(yīng)該跳到哪個位置。

三.算法的實現(xiàn)

? ? ? ? 1.前綴表的實現(xiàn):? ? ? ? ??

    void getNext(int* next, const string& s) {
        int j = -1;
        next[0] = j;
        for(int i = 1; i < s.size(); i++) { // 注意i從1開始
            while (j >= 0 && s[i] != s[j + 1]) { // 前后綴不相同了
                j = next[j]; // 向前回退
            }
            if (s[i] == s[j + 1]) { // 找到相同的前后綴
                j++;
            }
            next[i] = j; // 將j(前綴的長度)賦給next[i]
        }
    }

????????2.核心代碼

    int strStr(string haystack, string needle) {
        if (needle.size() == 0) {
            return 0;
        }
        int next[needle.size()];
        getNext(next, needle);
        int j = -1; // // 因為next數(shù)組里記錄的起始位置為-1
        for (int i = 0; i < haystack.size(); i++) { // 注意i就從0開始
            while(j >= 0 && haystack[i] != needle[j + 1]) { // 不匹配
                j = next[j]; // j 尋找之前匹配的位置
            }
            if (haystack[i] == needle[j + 1]) { // 匹配,j和i同時向后移動
                j++; // i的增加在for循環(huán)里
            }
            if (j == (needle.size() - 1) ) { // 文本串s里出現(xiàn)了模式串t
                return (i - needle.size() + 1);
            }
        }
        return -1;
    }

四.生成前綴表的筆者自己理解的方法

? ? ? ? 就是尋找在當(dāng)前字符是否是與原字符串起始位置相同,如果是相同的那就是1,但如果該字符左側(cè)就是已經(jīng)匹配過的片段,那直接加1后判斷下一個字符,比如下面的next[]

Leecode找出字符串中第一個匹配項的下標(biāo) 即實現(xiàn)strSTR()函數(shù),java,算法,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-659752.html

到了這里,關(guān)于Leecode找出字符串中第一個匹配項的下標(biāo) 即實現(xiàn)strSTR()函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • LeetCode 28題:找出字符串中第一個匹配項的下標(biāo)

    LeetCode 28題:找出字符串中第一個匹配項的下標(biāo)

    給你兩個字符串? haystack ?和? needle ?,請你在? haystack ?字符串中找出? needle ?字符串的第一個匹配項的下標(biāo)(下標(biāo)從 0 開始)。如果? needle ?不是? haystack ?的一部分,則返回?? -1 ? 。 示例 1: 示例 2: 提示: 1 = haystack.length, needle.length = 104 haystack ?和? needle ?僅由小寫

    2024年02月14日
    瀏覽(35)
  • Leetcode的AC指南 —— 字符串/KMP:28.找出字符串中第一個匹配項的下標(biāo)

    摘要: Leetcode的AC指南 —— 字符串/KMP:28.找出字符串中第一個匹配項的下標(biāo) 。題目介紹:給你兩個字符串 haystack 和 needle ,請你在 haystack 字符串中找出 needle 字符串的第一個匹配項的下標(biāo)(下標(biāo)從 0 開始)。如果 needle 不是 haystack 的一部分,則返回 -1 。 題目介紹 :給你兩

    2024年02月02日
    瀏覽(28)
  • 【LeetCode】每日一題&&兩數(shù)之和&&尋找正序數(shù)組的中位數(shù)&&找出字符串中第一個匹配項的下標(biāo)&&在排序數(shù)組中查找元素的第一個和最后一個位置

    【LeetCode】每日一題&&兩數(shù)之和&&尋找正序數(shù)組的中位數(shù)&&找出字符串中第一個匹配項的下標(biāo)&&在排序數(shù)組中查找元素的第一個和最后一個位置

    ========================================================================= 主頁點擊直達: 個人主頁 我的小倉庫: 代碼倉庫 C語言偷著笑: C語言專欄 數(shù)據(jù)結(jié)構(gòu)挨打小記: 初階數(shù)據(jù)結(jié)構(gòu)專欄 Linux被操作記: Linux專欄 LeetCode刷題掉發(fā)記: LeetCode刷題 算法: 算法專欄? C++頭疼記: C++專欄 計算機

    2024年02月08日
    瀏覽(37)
  • [C][整理][數(shù)組]從鍵盤輸入一個字符串(其長度小于20),找出其中ASCII碼值最小的字符,并輸出該字符。

    題目:從鍵盤輸入一個字符串(其長度小于20),找出其中ASCII碼值最小的字符,并輸出該字符。 只允許在 /***Program***/ 與 /***End***/ 之間添加。 測試輸入:kdjhfkbe 測試輸出:b 該程序的主要步驟是讀取用戶輸入的字符串、遍歷字符串中的每個字符,找到ASCII碼值最小的字符并輸出

    2024年02月06日
    瀏覽(66)
  • LeeCode前端算法基礎(chǔ)100題(21) 同構(gòu)字符串

    一、問題詳情: 給定兩個字符串? s ?和? t ?,判斷它們是否是同構(gòu)的。 如果? s ?中的字符可以按某種映射關(guān)系替換得到? t ?,那么這兩個字符串是同構(gòu)的。 每個出現(xiàn)的字符都應(yīng)當(dāng)映射到另一個字符,同時不改變字符的順序。不同字符不能映射到同一個字符上,相同字符只

    2024年01月19日
    瀏覽(25)
  • sqlserver 查找某個字符在字符串中第N次出現(xiàn)的位置

    如果想要在 Microsoft SQL Server 中查找某個字符在字符串中第 N 次出現(xiàn)的位置,可以使用 CHARINDEX 函數(shù)。該函數(shù)接受三個參數(shù): 要查找的字符(必需) 要搜索的字符串(必需) 開始搜索的位置(可選) 它會返回所查找字符在字符串中的位置,如果字符不存在,則返回 0。 舉個例子,如果

    2024年02月13日
    瀏覽(25)
  • 【字符串匹配】暴力匹配算法

    【字符串匹配】暴力匹配算法

    ? 暴力匹配算法,也稱為樸素字符串匹配算法,是一種簡單但不高效的字符串匹配方法。它的原理非常直觀,其主要思想是逐個字符地比較文本串和模式串,從文本串的每個可能的起始位置開始,依次檢查是否有匹配的子串。以下是暴力匹配算法的詳細原理: 1. 一個字一個

    2024年02月09日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu)】數(shù)組和字符串(十四):字符串匹配1:樸素的模式匹配算法(StringMatching)

    【數(shù)據(jù)結(jié)構(gòu)】數(shù)組和字符串(十四):字符串匹配1:樸素的模式匹配算法(StringMatching)

    ??字符串(String)是由零個或多個字符(char)順序排列組成的有限序列,簡稱為串。例如 “good morning”就是由12個字符構(gòu)成的一個字符串。一般把字符串記作: S = ′ ′ a 0 a 1 … a n ? 1 ′ ′ S=\\\'\\\'a_{0} a_{1}…a_{n-1}\\\'\\\' S = ′′ a 0 ? a 1 ? … a n ? 1 ′′ ? ??其中S是串名,引號中

    2024年02月05日
    瀏覽(42)
  • 字符串查找匹配算法

    字符串查找匹配算法

    字符串匹配(查找)是字符串的一種基本操作:給定帶匹配查詢的文本串S和目標(biāo)子串T,T也叫做模式串。在文本S中找到一個和模式T相符的子字符串,并返回該子字符串在文本中的位置。 Brute Force Algorithm,也叫樸素字符串匹配算法,Naive String Matching Algorithm。 基本思路就是將

    2024年02月14日
    瀏覽(29)
  • python字符串模糊匹配,并計算匹配分數(shù)

    python字符串模糊匹配,并計算匹配分數(shù)

    thefuzz包以前叫fuzzywuzzy,0.19版本開始改名為thefuzz,github地址: GitHub - seatgeek/thefuzz: Fuzzy String Matching in Python 可以通過命令pip install thefuzz安裝此包。用法還是比較簡單的: 上面兩個字符串的相似度為89%。 我們先看看這個包下面的源碼,來查看thefuzz是怎么實現(xiàn)模糊匹配的。the

    2023年04月23日
    瀏覽(103)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包