RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)據(jù)結(jié)構(gòu)之棧,隊(duì)列,串介紹

冬至子 ? 來(lái)源:我也不知道寫點(diǎn)啥好 ? 作者:Lin ? 2023-05-26 14:35 ? 次閱讀

棧和隊(duì)列不再過(guò)多描述,了解入棧出棧規(guī)則,入隊(duì)出隊(duì)規(guī)則,棧的遞歸應(yīng)用即可,面試肯定不會(huì)考這種概念,太簡(jiǎn)單。

LeetCode36棧的應(yīng)用

圖片

圖片

圖片

圖片

比如說(shuō)有相當(dāng)多的四則運(yùn)算,前綴,中綴,后綴的題目都與棧有關(guān)。

主要想講一下串這種數(shù)據(jù)結(jié)構(gòu)。串百分之九十九指的都是字符串,對(duì)于一個(gè)字符串S="Googlegoodgoor",來(lái)講想要找到一個(gè)為“goor”的子串,最常用的方法暴力搜索,一位一位的對(duì)照,直至找到相應(yīng)的子串,當(dāng)然這種算法太過(guò)于復(fù)雜,對(duì)于一個(gè)復(fù)雜的字符串,除非你的正則表達(dá)式,用的非常的好,能夠快速定位到需要的東西,否則你需要設(shè)計(jì)相當(dāng)多的代碼,來(lái)實(shí)現(xiàn)這個(gè)功能。下面介紹一種算法,KMP模式匹配算法,能夠大大減少重復(fù)遍歷的情況,這個(gè)算法很重要,2020年在面試騰訊C++崗位,讓我手寫過(guò)KMP算法。

講一下大致流程,原理可以自己分析。

設(shè)模式串為S="abcdaabcab",子串為T="abcab",傳統(tǒng)暴力解決方法S[0],T[0]比較,在比較S[1],T[1],當(dāng)S[3],T[3]不相等的時(shí)候,S退回到S[0],T退回到T[0],當(dāng)我們匹配到S[3],T[3]不等的時(shí)候S有必要退回S[2]重新比較么,顯然第一次比較的所有動(dòng)作全部白費(fèi),KMP很好的解決了這種重復(fù)遍歷的情況,用一個(gè)Next數(shù)組來(lái)保存這些有用的信息

Next數(shù)組,最長(zhǎng)前綴默認(rèn)Next[0]=-1,什么是最長(zhǎng)前綴,對(duì)于子串a(chǎn)bcab,有相等前綴后綴子串a(chǎn)b。

1.jpg

匹配方法:當(dāng)我們第一次匹配的時(shí)候,S位置在S[3],T位置在T[3]不相等,我們借助next數(shù)組next[3]為0所以子串要退回到T[0]位置,與S[3]相比依然不相等,這時(shí)候就需要S移動(dòng)到S[4]的位置,S[4]=T[0],但S[5]不等于T[1],即子串退回到next[1]的T[0]位置,即從后面開始可以匹配到子串。

LeetCode第28題

圖片

圖片

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C++語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    147

    瀏覽量

    6987
  • kmp算法
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    1441
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    c++隊(duì)列

    stack ,(堆棧),是一種先進(jìn)后出(First In Last Out,FILO)的數(shù)據(jù)結(jié)構(gòu),先插入的數(shù)據(jù)底,后放入的數(shù)據(jù)
    的頭像 發(fā)表于 07-15 08:50 ?943次閱讀
    c++<b class='flag-5'>之</b><b class='flag-5'>棧</b>和<b class='flag-5'>隊(duì)列</b>

    收藏 | 程序員面試,你必須知道的8大數(shù)據(jù)結(jié)構(gòu)

    數(shù)據(jù)結(jié)構(gòu)首先列出一些最常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),我們將逐一說(shuō)明:數(shù)組隊(duì)列鏈表樹圖字典樹(這是一種高效的樹形結(jié)構(gòu),但值得單獨(dú)說(shuō)明)散列表(哈希表)數(shù)
    發(fā)表于 09-30 09:35

    常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)

    的,那樣對(duì)于數(shù)據(jù)的使用簡(jiǎn)直是個(gè)悲劇。針對(duì)此類數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)提供了圖存儲(chǔ)結(jié)構(gòu),專門用于存儲(chǔ)這類數(shù)據(jù)。二、數(shù)
    發(fā)表于 05-10 07:58

    數(shù)據(jù)結(jié)構(gòu)隊(duì)列順序及其構(gòu)造

    數(shù)據(jù)結(jié)構(gòu)隊(duì)列順序隊(duì)列構(gòu)造順序隊(duì)列順序隊(duì)列的初始化判斷隊(duì)列
    發(fā)表于 12-17 06:11

    數(shù)據(jù)結(jié)構(gòu)鏈?zhǔn)?b class='flag-5'>棧介紹

    數(shù)據(jù)結(jié)構(gòu)鏈?zhǔn)?b class='flag-5'>棧鏈?zhǔn)?b class='flag-5'>棧鏈?zhǔn)?b class='flag-5'>棧的定義鏈?zhǔn)?b class='flag-5'>棧操作的實(shí)現(xiàn)鏈?zhǔn)?b class='flag-5'>棧
    發(fā)表于 12-17 08:11

    數(shù)據(jù)結(jié)構(gòu)課件

    數(shù)據(jù)結(jié)構(gòu)課件: 第一章  緒論.pdf      第二、三章  線性結(jié)構(gòu).pdf      第四章
    發(fā)表于 08-06 13:21 ?0次下載

    你還會(huì)手寫隊(duì)列隊(duì)列的基本實(shí)現(xiàn)程序說(shuō)明

    昨天跟一個(gè)CSDN上的朋友聊天,他說(shuō)現(xiàn)在如果讓他自己手寫一個(gè)或者隊(duì)列,估計(jì)都要寫蠻久的,平時(shí)雖然都在用,但是都是別人封裝好的集合。確實(shí),經(jīng)典的數(shù)據(jù)結(jié)構(gòu),包括排序算法,雖然我們平時(shí)不用手寫了,但是
    的頭像 發(fā)表于 11-11 11:34 ?2798次閱讀

    什么是?數(shù)據(jù)結(jié)構(gòu)如何實(shí)現(xiàn)

    今天放松一下,我們來(lái)看看數(shù)據(jù)結(jié)構(gòu)中的,這節(jié)的知識(shí)點(diǎn)可以說(shuō)是數(shù)據(jù)結(jié)構(gòu)中最容易上手的知識(shí)點(diǎn)了,其實(shí)比起鏈表,其實(shí)鏈表也有隊(duì)列的模型,鏈表的
    發(fā)表于 04-29 18:25 ?0次下載
    什么是<b class='flag-5'>棧</b>?<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>中<b class='flag-5'>棧</b>如何實(shí)現(xiàn)

    如何解決數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)最大頻率問(wèn)題?

    讀完本文,可以去力扣解決如下題目: 895.最大頻率(Hard) ? 我個(gè)人很喜歡設(shè)計(jì)特殊數(shù)據(jù)結(jié)構(gòu)的問(wèn)題,畢竟在工作中會(huì)經(jīng)常用到基本數(shù)據(jù)結(jié)構(gòu),而設(shè)計(jì)類的問(wèn)題就非??简?yàn)對(duì)基本數(shù)據(jù)結(jié)構(gòu)
    的頭像 發(fā)表于 03-02 11:02 ?1419次閱讀

    深度解析數(shù)據(jù)結(jié)構(gòu)與算法篇隊(duì)列及環(huán)形隊(duì)列的實(shí)現(xiàn)

    01 — 隊(duì)列簡(jiǎn)介 隊(duì)列是種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),有個(gè)元素進(jìn)入隊(duì)列稱為入對(duì)(enqueue),刪除元素稱為出隊(duì)(dequeue),隊(duì)列有對(duì)頭(
    的頭像 發(fā)表于 06-18 10:07 ?1923次閱讀

    隊(duì)列實(shí)現(xiàn)原理是什么?隊(duì)列實(shí)現(xiàn)方案有哪幾種?

    是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),而隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),兩者原理不難理解,使用也簡(jiǎn)單。
    的頭像 發(fā)表于 07-04 13:28 ?2730次閱讀
    <b class='flag-5'>隊(duì)列</b>實(shí)現(xiàn)<b class='flag-5'>棧</b>原理是什么?<b class='flag-5'>隊(duì)列</b>實(shí)現(xiàn)<b class='flag-5'>棧</b>方案有哪幾種?

    SystemVerilog中可以嵌套的數(shù)據(jù)結(jié)構(gòu)

    SystemVerilog中除了數(shù)組、隊(duì)列和關(guān)聯(lián)數(shù)組等數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)還可以嵌套。
    的頭像 發(fā)表于 11-03 09:59 ?1593次閱讀

    數(shù)據(jù)結(jié)構(gòu)解決滑動(dòng)窗口問(wèn)題

    前文用 [單調(diào)解決三道算法問(wèn)題]介紹了單調(diào)這種特殊數(shù)據(jù)結(jié)構(gòu),本文寫一個(gè)類似的數(shù)據(jù)結(jié)構(gòu)「單調(diào)隊(duì)列
    的頭像 發(fā)表于 04-19 10:50 ?651次閱讀
    <b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>解決滑動(dòng)窗口問(wèn)題

    兩個(gè)實(shí)現(xiàn)一個(gè)隊(duì)列方法

    隊(duì)列是比較基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)。無(wú)論在工作中,還是在面試中,隊(duì)列都用的比較多。在計(jì)算機(jī)的世界,你會(huì)看到
    的頭像 發(fā)表于 10-08 15:54 ?801次閱讀

    redis數(shù)據(jù)結(jié)構(gòu)的底層實(shí)現(xiàn)

    Redis是一種內(nèi)存鍵值數(shù)據(jù)庫(kù),常用于緩存、消息隊(duì)列、實(shí)時(shí)數(shù)據(jù)分析等場(chǎng)景。它的高性能得益于其精心設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu)和底層實(shí)現(xiàn)。本文將詳細(xì)介紹Re
    的頭像 發(fā)表于 12-05 10:14 ?614次閱讀
    RM新时代网站-首页