第四章 串

【考纲内容】字符串模式匹配

【重点】KMP算法,next数组与nextval数组

串的基本概念

串(String)是由零个或多个字符组成的有限序列,是一种特殊的线性表。串的逻辑结构与线性表类似,区别在于串的数据对象限定为字符集。

重要术语

  • 长度:串中字符的个数(空串长度为0)。
  • 子串:串中任意个连续字符组成的子序列。
  • 主串:包含子串的串。
  • 位置:字符在串中的序号(从1开始)。

串的存储结构

1. 定长顺序存储

用一组连续的存储单元存储字符,长度固定(超出部分截断)。

cs 复制代码
#define MAXLEN 255  
typedef struct {  
    char ch[MAXLEN];  
    int length;  
} SString;  

2. 堆分配存储

动态分配内存空间,长度可变。

cs 复制代码
typedef struct {  
    char *ch;  
    int length;  
} HString;  

3. 块链存储

用链表存储串的字符,每个结点可存多个字符(如块大小为4)。

cs 复制代码
typedef struct Chunk {  
    char ch[4];  
    struct Chunk *next;  
} Chunk;  
typedef struct {  
    Chunk *head, *tail;  
    int length;  
} LString;  

串的基本操作

赋值操作

将串T的值赋给串S(需保证S有足够空间)。

比较操作

按字典序比较两个串的大小(如"abc" < "acd")。

求子串

从主串的指定位置截取指定长度的子串。

连接操作

将串S1和串S2拼接为新串(如"Hello" + "World" = "HelloWorld")。

模式匹配

在主串中查找子串的位置(经典算法:朴素匹配、KMP算法)。


模式匹配算法

朴素匹配(Brute-Force)

逐个字符比较,失败时主串回溯到起始位置的下一位。

时间复杂度:O(n*m)(n为主串长度,m为子串长度)。

KMP算法

利用部分匹配表(next数组)避免主串回溯。

  • next数组:记录子串前缀与后缀的最长公共长度。
  • 时间复杂度:O(n+m)。

示例:子串"ababc"的next数组为[0, 0, 1, 2, 0]


串的应用

  • 文本编辑:查找、替换、插入等操作。
  • 搜索引擎:关键词匹配。
  • 生物信息学:DNA序列比对。

通过理解串的存储结构和核心操作,可以高效处理文本相关任务。

相关推荐
雪碧聊技术18 小时前
中国可重复使用火箭首次成功着陆——航天“降本时代”正式开启
大数据·人工智能
LJHclasstore_luo18 小时前
【C++题解】112354.平行时空
数据结构·c++·算法
Geoffwo18 小时前
通用动作意念脑电信号高度相似的理论依据
大数据·人工智能
czhc114007566318 小时前
719:StartPoint;Margin;ResourceDictionar;Component.model;lds;
c#
科技圈快迅18 小时前
新工科保研机构怎么选?垂直辅导与综合型服务模式差异解析
大数据·人工智能
大模型丫丫19 小时前
Agent开发的难点是什么呢?
大数据·人工智能·学习
在深圳创业的何仙姑19 小时前
2026 深圳跨境财税服务商筛选参考|行业风险规避实操指南
大数据·人工智能·跨境电商·财税
手写码匠19 小时前
MCP协议从零实现:手写一个完整的 Model Context Protocol 服务器与客户端
开发语言·数据结构
大模型丫丫19 小时前
Skill-Agent 如何实践:从概念到落地的完整指南
java·大数据·人工智能
问商十三载19 小时前
2026大模型GEO优化体系:3层链路提收录,零成本提34%引用率附工具包
大数据·前端·人工智能