【数据结构】考研真题攻克与重点知识点剖析 - 第 4 篇:串

前言

  • 本文基础知识部分来自于b站:分享笔记的好人儿的思维导图与王道考研课程,感谢大佬的开源精神,习题来自老师划的重点以及考研真题。
  • 此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析,本人技术有限,最终数据清洗结果不够理想,相关CSDN文章便没有发出。

(考研真题待更新)

欢迎订阅专栏:408直通车

请注意,本文中的部分内容来自网络搜集和个人实践,如有任何错误,请随时向我们提出批评和指正。本文仅供学习和交流使用,不涉及任何商业目的。如果因本文内容引发版权或侵权问题,请通过私信告知我们,我们将立即予以删除。

文章目录

  • 前言
  • 第四章 串
    • 串的定义与实现
      • 概念
        • 小结
      • 串的存储结构(和线性表几乎一样,仅将存储数据的类型改为字符)
        • 顺序存储结构
        • 链式存储结构
          • 小结
        • 块链存储结构
    • 串的模式匹配
      • 简单模式匹配算法
      • KMP算法
          • 手算
      • 进一步优化
    • 代码
      • 王道代码见教材
      • 补充代码
  • 考研真题
    • 408 - 2023

第四章 串

串的定义与实现

概念

  • 串的概念

    • 零个或多个任意字符组成的有限序列(内容受限的线性表)
  • 子串的概念

    • 一个串中任意个连续字符组成的子序列(含空串)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

串的存储结构(和线性表几乎一样,仅将存储数据的类型改为字符)

顺序存储结构

在这里插入图片描述
在这里插入图片描述
char 8bit 0~255

链式存储结构

在这里插入图片描述
在这里插入图片描述

  • 一个结点若只存一个字符,存储密度过低,引出块链存储结构
  • 在这里插入图片描述
  • 在这里插入图片描述
    在这里插入图片描述
小结

在这里插入图片描述

块链存储结构
  • 每个结点既可以存放一个字符,也可以存放多个字符。每个结点称为块

串的模式匹配

简单模式匹配算法

  • 概念在这里插入图片描述

    • 子串的定位操作通常称为串的模式匹配,它求的是子串(模式串)在主串中的位置
  • 算法思想

    • 将主串中与模式串长度相同的子串逐个与模式串匹配,暴力法在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
  • 缺点

    • 主串指针回溯导致时间开销,时间复杂度为:O(nm),nm分别为主串和模式串的长度在这里插入图片描述
      在这里插入图片描述

KMP算法

  • 基本概念在这里插入图片描述
    在这里插入图片描述

    • 前缀

      • 除最后一个字符外,字符串的所有头部子串
    • 后缀

      • 除第一个字符外,字符串的所有尾部子串
  • 算法思想

    • 主串指针不必回溯,模式串指针根据next数组部分回溯(如果已匹配相等的前缀序列中有某个后缀正好是模式的前缀,可以将模式串向后滑动到与这些相等字符对齐的位置)
  • next数组

    • 表明当模式中第j个字符与主串中相应字符匹配失败时,在模式中需重新和主串中该字符进行比较的字符位置在这里插入图片描述

      • 即衡量模式串向后滑动的量
    • 计算

      • 在这里插入图片描述

        • 以“abab”为例

          • 序号j = 1时,属于j == 1情况,next[j] = 0

          • 序号j = 2时,‘a’的前后缀都为空集,属于其他情况,next[j] = 1

          • 序号j = 3时,‘ab’的前缀为{a},后缀为{b},交集为空,属于其他情况,next[j] = 1

          • 序号j = 4时,‘aba’的前缀为{a,ab},后缀为{a,ba},交集为{a},k - 1 = 1(长度),next[j] = k = 2(长度+1)

  • 时间复杂度:O(m + n)
    在这里插入图片描述
    在这里插入图片描述

手算
  • 1
    在这里插入图片描述
    在这里插入图片描述

  • 2
    在这里插入图片描述
    在这里插入图片描述

  • 3在这里插入图片描述
    在这里插入图片描述

  • 4在这里插入图片描述
    在这里插入图片描述

  • 5在这里插入图片描述
    在这里插入图片描述

  • 6在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

进一步优化

  • 构造nextval数组
    • 在这里插入图片描述

      • 若模式串指向的位置的字符等于本身,可以直接赋值

      • 举例

        • 5号的a中next数组指向3号位置,3号位置也是a故直接把3号的next数组值复制过去

        • 6号的a中next数组指向4号位置,两者字符不同,不能优化

代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

王道代码见教材

补充代码

  • cin >> n >> p+1 >> m >> s+1;// char数组s是长文本,p是模式串,且从数组下标1开始存储
    for(int i=2,j=0;i<=n;i++){  //求next数组while(j&&p[i]!=p[j+1]) j=ne[j];if(p[i]==p[j+1]) j++;ne[i]=j;
    }
    for(int i=1,j=0;i<=m;i++){  //匹配while(j&&s[i]!=p[j+1]) j=ne[j];if(s[i]==p[j+1]) j++;if(j==n){j=ne[j];//匹配成功}
    }
    

考研真题

408 - 2023

(考研真题待更新)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/299465.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完全二叉树的层序遍历c++

借鉴的文章 利用完全二叉树的遍历确定完全二叉树 题目 输入样例&#xff1a; 8 91 71 2 34 10 15 55 18输出样例&#xff1a; 18 34 55 71 2 10 15 91 思路 完全二叉树具有这样的性质&#xff1a; 该图来源的文章&#xff1a;天梯赛 L2-3 完全二叉树的层序遍历 - a-shy-cod…

安全的通信协议HTTPS被攻击改采用什么防护方案

随着互联网的发展&#xff0c;保护用户在网上交换的敏感信息的安全性变得至关重要。HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;作为一种安全的通信协议&#xff0c;通过加密数据传输&#xff0c;保护用户的隐私和数据安全。然而&#xff0c;尽管HTTPS提…

SpringMVC框架简介

前言 现在由于功能以及业务的复杂性&#xff0c;大部分系统从技术上就拆分开为前后端分离&#xff0c;单体应用我都很少没接触了&#xff0c;导致现在对springMVC那套都忘记了很多东西&#xff0c;因此这篇文章在来回忆一下SpringMVC这个框架&#xff1b;很多时候因为业务的需…

【Android】图解View的工作流程原理

文章目录 入口DecorView如何加载到Window中MeasureSpec MeasureView的测量ViewGroup的测量 LayoutView的layout() Draw1、绘制背景3、绘制View内容4、绘制子View6、绘制装饰 入口 DecorView如何加载到Window中 MeasureSpec 该类是View的内部类&#xff0c;封装View的规格尺寸…

876.链表的中间结点 143.重排链表

给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5] 解释&#xff1a;链表只有一个中间结点&#xff0c;值为 3 。示…

文献学习-28-Endora: 用于内镜仿真的视频生成模型

Endora : Video Generation Models as Endoscopy Simulators Authors: Chenxin Li, Hengyu Liu, Yifan Liu, Brandon Y. Feng, Wuyang Li, Xinyu Liu, Zhen Chen, Jing Shao, Yixuan Yuan Keywords: Medical Generative AI Video Generation Endoscopy Abstract 生成模型有…

【C++】红黑树讲解及实现

前言&#xff1a; AVL树与红黑树相似&#xff0c;都是一种平衡二叉搜索树&#xff0c;但是AVL树的平衡要求太严格&#xff0c;如果要对AVL树做一些结构修改的操作性能会非常低下&#xff0c;比如&#xff1a;插入时要维护其绝对平衡&#xff0c;旋转的次数比较多&#xff0c;更…

33. UE5 RPG使用增强输入激活GameplayAbility(三)

在前面的文章&#xff0c;我们实现了使用GameplayTag和InputAction的对应绑定的数据&#xff0c;并且添加到了增强输入映射的上下文中&#xff0c;实现了通过按键打印对应的GameplayTag&#xff0c;这只是我们基础需要制作的。目的主要是为了实现在GameplayAblity上面设置对应的…

深入浅出 -- 系统架构之分布式多形态的存储型集群

一、多形态的存储型集群 在上阶段&#xff0c;我们简单聊了下集群的基本知识&#xff0c;以及快速过了一下逻辑处理型集群的内容&#xff0c;下面重点来看看存储型集群&#xff0c;毕竟这块才是重头戏&#xff0c;集群的形态在其中有着多种多样的变化。 逻辑处理型的应用&…

【.Net】DotNetty

文章目录 概述NIO和BIO、AIODotNetty适用场景DotNetty的整体架构和模块DotNetty的使用示例来源 概述 本系列文章主要讲述由微软Azure团队研发的.net的版本的netty&#xff0c;Dotnetty。所有的开发都将基于.net core 3.1版本进行开发。 Dotnetty是什么&#xff0c;原本Netty是…

蓝桥真题--路径之谜DFS解法

路径之谜 思路 前置知识&#xff1a;深度搜索模板搜索所有可以找的路径&#xff0c;将走过的靶子减去一走到最后一个格子的时候&#xff0c;直接去判断所有的靶子只有除最后一个位置的靶子&#xff0c;其余靶子都归零的时候&#xff0c;判断一个最后一个位置横坐标和纵坐标的靶…

PTA C 1050 螺旋矩阵(思路与优化)

本题要求将给定的 N 个正整数按非递增的顺序&#xff0c;填入“螺旋矩阵”。所谓“螺旋矩阵”&#xff0c;是指从左上角第 1 个格子开始&#xff0c;按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列&#xff0c;满足条件&#xff1a;mn 等于 N&#xff1b;m≥n&#xff1b;且…

Bayes-RF,基于贝叶斯Bayes优化算法优化随机森林RF分类预测(二分类及多分类皆可)-附代码

Bayesian Optimization&#xff08;贝叶斯优化&#xff09;是一种用于超参数调优的技术&#xff0c;对于类似随机森林&#xff08;Random Forest&#xff0c;简称RF&#xff09;的机器学习算法非常重要。随机森林是一种集成学习方法&#xff0c;它在训练过程中构建多个决策树&a…

漂亮国的无人餐厅的机器人骚操作

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;你的老朋友&#xff0c;老K。行业群 新书《智能物流系统构成与技术实践》 知名企业 读者福利&#xff1a; &#x1f449;抄底-仓储机器人-即买即用-免调试 智能制造-话题精读 1、西门子、ABB、汇川&#x…

详解 Redis 在 Centos 系统上的安装

文章目录 详解 Redis 在 Centos 系统上的安装1. 使用 yum 安装 Redis 52. 创建符号链接3. 修改配置文件4. 启动和停止 Redis 详解 Redis 在 Centos 系统上的安装 1. 使用 yum 安装 Redis 5 如果是Centos8&#xff0c;yum 仓库中默认的 redis 版本就是5&#xff0c;直接 yum i…

Premiere Pro 2024:赋予创意翅膀,让你的视频飞翔 mac/win版

Premiere Pro 2024&#xff0c;作为Adobe旗下的旗舰视频编辑软件&#xff0c;自推出以来&#xff0c;一直在视频制作领域占据着重要的地位。随着技术的不断进步和创新&#xff0c;Premiere Pro 2024为用户带来了前所未有的编辑体验&#xff0c;重新定义了视频制作的标准。 Pre…

Unity类银河恶魔城学习记录12-3 p125 Limit Inventory Slots源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Inventory.cs using Newtonsoft.Json.Linq; using System.Collections; us…

深入go泛型特性之comparable「附案例」

写作背景 如果你经常遇到一些操作&#xff0c;比如将 map 转换为 slice&#xff0c;判断一个字符串是否出现在 map 中&#xff0c;slice 中是否有重复元素等等&#xff0c;那你对下面这个库肯定不陌生。 github.com/samber/lo最近抽业余时间在看了源码&#xff0c;底层用了范…

云计算的安全需求

目录 一、概述 二、云安全服务基本能力要求 三、信息安全服务&#xff08;云计算安全类&#xff09;资质要求 3.1 概述 3.2 资质要求内容 3.2.1 组织与管理要求 3.2.2 技术能力要求 四、云安全主要合规要求 4.1 安全管理机构部门的建立 4.2 安全管理规范计划的编制 4…

【Flutter】Getx设计模式及Provider、Repository、Controller、View等

本文基于Getx 4,x 本本 1、引入 再次接触到Flutter项目&#xff0c;社区俨然很完善和活跃。pubs.dev 寻找状态管理的时候看到很熟悉的Getx时间&#xff0c;俨然发现Getx的版本已到是4.x版本&#xff0c;看到Getx的功能已经非常强大了&#xff0c;庞大的API俨然成为一种开发框架…