串基本概念:串是由零个或者多个字符组成的有限序列,一半记作S='a1,a2,a3,a4.......'(n>=0,串的长度)
1.S == 串的名字 n == 串当中字符串的个数,称为串的长度。
串的常用术语
1.空串(null string):长度为零的串,它不包含任何字符。
2.空格串(black string) :任由一个或多个空格组成的串,长度大于等于1
3.子串(sub string):串中任意个连续字符的组成的子序列称为该串的“子串”
4.主串(master string):包含子串的串相应的称为“主串”,因此子串是主串的一部分。
5.前缀子串(prefix sub string):S的前缀子串是一个子串U,记作U = 'a1,.....ab'(1<=b<=n),当1<=b
6.后缀子串(suffix sub string):S的后缀子串是一个子串U,记作U = 'an-b-1....an'(1<=b<=n),当1<=b eg.S='abccset',S的前缀子串是‘a’,'ab','abc','abcc','abccs','abccse'。S的后缀子串是‘t’,'et','set','cset','ccset','bccset'。 7.位置:通过将字符在串中的序号,称为该字符在串中的“位置”。子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。 8.串相等:当且仅当两个串的值相等的时候,则称两个串的数值相等。条件:长度相等以及位置必须相等 9.模式匹配:确定子串在主串的某个位置开始后,在主串中首次出现的位置的运算。主串=="目标串",子串==“格式串”。 eg. 串A = “abcaabsbcas”,串B = "bca",从第一个位置开始,匹配的运算结果是2,从第四个位置开始的运算结果是8。 1.strInsert(S,pos ,T) 设S='chater',T=‘rac’,运行StrInsert(S,4,T),S='character' 2.strDelete(S.pos,len) 设S='chapter',运行StrDelete(S,5,3),则S='chap' 3.StrCat(S,T) 设串S='man',运行Strcat(S,'kind'),则S='mankind' 4.Substring(T,S,pos,len) eg.设串S='commander',运行SubString(Sub1,S,4,3),则Sub1='man'。 5.StrIndex(S,pos,T) 设S='abcaabcaaabc',T='bca',运行StrIndex(S,1,T),返回2,运行StrIndex(S,4,T),返回值是 6。 6.StrReplace(S,T,V) eg.设S='abcaabcaaabca',T='bca',若V='x',则S='axaxaax',若V='bc',则S='abcancaabc' 定义顺序串 1.定长顺序串存储结构 串的实际长度可以在MAXSIZE范围内随意变动,超过范围的会舍去,称为“截断”。 2.定长串的基本操作实现 插入:三种情况 删除函数: 串的连接 1.连接后串长小于等于MaxSize,则直接连接在第一个串的后面。 2.连接后,当串长大于MaxSize,且原始串的长度小于MaxSize,则待连接串则会舍弃一部分,当原始串长==MaxSize,则将待连接串全部进行舍弃。 1.串的初始化 2.串的赋值操作 3.串的插入 4.串的删除 5.串的连接 块链串(链表的每一个结点存放一个字符或者多个字符,每个结点称为块,整个链表称为“块链结构”) 块大小:块链表存放字符的个数 当块的大小 == 1的时候,增删改查的方法和单链表一样,因为只有一个数据域和一个指针域,但当块的大小 ≠ 1的时候,则需要进行结点的拆分和合并.... 存储密度:存储密度 = 串值所占的存储位 / 实际分配的存储位 思路:从主串的第一个字符开始进行匹配,当主串和子串的字符不相同的时候,就回溯到开始字符的下一个字符,重新开始进行匹配,知道找到为止 思路:相对于暴力索引求解,KMP的时间复杂度大大降低,开始都是和BF算法一样,一个一个字符进行匹配,但当主串和子串的字符不相等的时候,不再是回到主串中开始比较字符的下一位,而是进行一个“子串向后移动最长前后缀相等子串长度”,最后找到对应的字符串。(详细介绍:数据结构KMP算法配图详解(超详细)_哈顿之光的博客-CSDN博客_kmp算法难吗是什么级别) 这里需要好好理解一下next数组的作用(记录当前字符的前面的最长前后缀相等的字符串) 首先将模式串的每一个字符对应的next的数值求出来 eg. "ABCABCKO" 这样就得到了当前每一个字符对应的next数组的数值。 KMP算法的改进:当主串为“aaabaaac”,模式串为“aaac”
串的基本运算
串的存储结构以及实现
堆串(相较于定长的顺序串,堆串可以动态的分配内存空间,这样可以保证不会出现截断的情况)

串的模式匹配
1.BF模式匹配算法
2.KMP模式匹配算法


Win11+ VS2022编译 FFmpeg6.0 静态库
关于编译器对连续的构造+拷贝构造/连续的拷贝构造的优化
【封装--限定符private--包】
用Java实现扑克牌游戏——简易炸金花
Arduino 学习笔记_4 模拟输入和输出
基于STM32的蓝牙小车(虚拟串口模拟)的Proteus仿真
[C++]Leetcode17电话号码的字母组合
AspectJ切面编程(xml方式)
CODING DevSecOps 助力金融企业跑出数字加速度
SQLcl 中 c/old/new 替换变量为何失效?先定位再替换
不让模型写作文,直接从它脑子里读答案:Jev 决策在 .NET 的两条路线
Halo插件:支持GitHub的图床附件策略
电视投屏界的“一股清流”!SimpleTVCast 6.0.0-beta 抢先体验:无需TV端App,界面大换血!✨
华三VXLAN集中式网关实战指南:Spine多活网关 + 双活接入(M-LAG)
软件更好写之后口碑会更重要
大 O、大 Omega、大 Theta 的区别,O(n) 复杂度是什么意思
Java标签跳转:一个鲜为人知但却很实用的小技巧
多智能体系统论文速读