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

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

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

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

冬至子 ? 來源:我也不知道寫點啥好 ? 作者:Lin ? 2023-05-26 14:35 ? 次閱讀

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

LeetCode36棧的應(yīng)用

圖片

圖片

圖片

圖片

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

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

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

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

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

1.jpg

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

LeetCode第28題

圖片

圖片

圖片

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

    關(guān)注

    0

    文章

    147

    瀏覽量

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

    關(guān)注

    0

    文章

    4

    瀏覽量

    1437
收藏 人收藏

    評論

    相關(guān)推薦

    c++隊列

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

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

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

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

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

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

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

    數(shù)據(jù)結(jié)構(gòu)鏈式介紹

    數(shù)據(jù)結(jié)構(gòu)鏈式鏈式鏈式的定義鏈式操作的實現(xiàn)鏈式
    發(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次下載

    你還會手寫隊列隊列的基本實現(xiàn)程序說明

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

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

    今天放松一下,我們來看看數(shù)據(jù)結(jié)構(gòu)中的,這節(jié)的知識點可以說是數(shù)據(jù)結(jié)構(gòu)中最容易上手的知識點了,其實比起鏈表,其實鏈表也有隊列的模型,鏈表的
    發(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>如何實現(xiàn)

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

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

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

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

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

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

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

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

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

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

    兩個實現(xiàn)一個隊列方法

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

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

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