0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

数据结构之栈,队列,串介绍

冬至子 来源:我也不知道写点啥好 作者:Lin 2023-05-26 14:35 次阅读

栈和队列不再过多描述,了解入栈出栈规则,入队出队规则,栈的递归应用即可,面试肯定不会考这种概念,太简单。

LeetCode36栈的应用

图片

图片

图片

图片

比如说有相当多的四则运算,前缀,中缀,后缀的题目都与栈有关。

主要想讲一下串这种数据结构。串百分之九十九指的都是字符串,对于一个字符串S="Googlegoodgoor",来讲想要找到一个为“goor”的子串,最常用的方法暴力搜索,一位一位的对照,直至找到相应的子串,当然这种算法太过于复杂,对于一个复杂的字符串,除非你的正则表达式,用的非常的好,能够快速定位到需要的东西,否则你需要设计相当多的代码,来实现这个功能。下面介绍一种算法,KMP模式匹配算法,能够大大减少重复遍历的情况,这个算法很重要,2020年在面试腾讯C++岗位,让我手写过KMP算法。

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

设模式串为S="abcdaabcab",子串为T="abcab",传统暴力解决方法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很好的解决了这种重复遍历的情况,用一个Next数组来保存这些有用的信息

Next数组,最长前缀默认Next[0]=-1,什么是最长前缀,对于子串abcab,有相等前缀后缀子串ab。

1.jpg

匹配方法:当我们第一次匹配的时候,S位置在S[3],T位置在T[3]不相等,我们借助next数组next[3]为0所以子串要退回到T[0]位置,与S[3]相比依然不相等,这时候就需要S移动到S[4]的位置,S[4]=T[0],但S[5]不等于T[1],即子串退回到next[1]的T[0]位置,即从后面开始可以匹配到子串。

LeetCode第28题

图片

图片

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C++语言
    +关注

    关注

    0

    文章

    147

    浏览量

    6971
  • kmp算法
    +关注

    关注

    0

    文章

    4

    浏览量

    1441
收藏 人收藏

    评论

    相关推荐

    c++队列

    stack ,(堆栈),是一种先进后出(First In Last Out,FILO)的数据结构,先插入的数据底,后放入的数据
    的头像 发表于 07-15 08:50 894次阅读
    c++<b class='flag-5'>之</b><b class='flag-5'>栈</b>和<b class='flag-5'>队列</b>

    收藏 | 程序员面试,你必须知道的8大数据结构

    数据结构首先列出一些最常见的数据结构,我们将逐一说明:数组队列链表树图字典树(这是一种高效的树形结构,但值得单独说明)散列表(哈希表)数
    发表于 09-30 09:35

    常见的数据结构

    的,那样对于数据的使用简直是个悲剧。针对此类数据数据结构提供了图存储结构,专门用于存储这类数据。二、
    发表于 05-10 07:58

    数据结构队列顺序及其构造

    数据结构队列顺序队列构造顺序队列顺序队列的初始化判断队列
    发表于 12-17 06:11

    数据结构链式介绍

    数据结构链式链式链式的定义链式操作的实现链式
    发表于 12-17 08:11

    数据结构课件

    数据结构课件: 第一章  绪论.pdf      第二、三章  线性结构.pdf      第四章
    发表于 08-06 13:21 0次下载

    你还会手写队列队列的基本实现程序说明

    昨天跟一个CSDN上的朋友聊天,他说现在如果让他自己手写一个或者队列,估计都要写蛮久的,平时虽然都在用,但是都是别人封装好的集合。确实,经典的数据结构,包括排序算法,虽然我们平时不用手写了,但是
    的头像 发表于 11-11 11:34 2780次阅读

    什么是?数据结构如何实现

    今天放松一下,我们来看看数据结构中的,这节的知识点可以说是数据结构中最容易上手的知识点了,其实比起链表,其实链表也有队列的模型,链表的
    发表于 04-29 18:25 0次下载
    什么是<b class='flag-5'>栈</b>?<b class='flag-5'>数据结构</b>中<b class='flag-5'>栈</b>如何实现

    如何解决数据结构设计最大频率问题?

    读完本文,可以去力扣解决如下题目: 895.最大频率(Hard)   我个人很喜欢设计特殊数据结构的问题,毕竟在工作中会经常用到基本数据结构,而设计类的问题就非常考验对基本数据结构
    的头像 发表于 03-02 11:02 1402次阅读

    深度解析数据结构与算法篇队列及环形队列的实现

    01 — 队列简介 队列是种先进先出的数据结构,有个元素进入队列称为入对(enqueue),删除元素称为出队(dequeue),队列有对头(
    的头像 发表于 06-18 10:07 1894次阅读

    队列实现原理是什么?队列实现方案有哪几种?

    是一种后进先出的数据结构,而队列是一种先进先出的数据结构,两者原理不难理解,使用也简单。
    的头像 发表于 07-04 13:28 2711次阅读
    <b class='flag-5'>队列</b>实现<b class='flag-5'>栈</b>原理是什么?<b class='flag-5'>队列</b>实现<b class='flag-5'>栈</b>方案有哪几种?

    SystemVerilog中可以嵌套的数据结构

    SystemVerilog中除了数组、队列和关联数组等数据结构,这些数据结构还可以嵌套。
    的头像 发表于 11-03 09:59 1563次阅读

    数据结构解决滑动窗口问题

    前文用 [单调解决三道算法问题]介绍了单调这种特殊数据结构,本文写一个类似的数据结构「单调队列
    的头像 发表于 04-19 10:50 636次阅读
    <b class='flag-5'>数据结构</b>解决滑动窗口问题

    两个实现一个队列方法

    队列是比较基础的数据结构。无论在工作中,还是在面试中,队列都用的比较多。在计算机的世界,你会看到
    的头像 发表于 10-08 15:54 780次阅读

    redis数据结构的底层实现

    Redis是一种内存键值数据库,常用于缓存、消息队列、实时数据分析等场景。它的高性能得益于其精心设计的数据结构和底层实现。本文将详细介绍Re
    的头像 发表于 12-05 10:14 592次阅读