第四章 串

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

【重点】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序列比对。

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

相关推荐
大大大大晴天3 分钟前
每天认识一个组件:数据集成Apache SeaTunnel
大数据
广州宏帝箱包38 分钟前
出口箱包的包装标准:防潮、防摔、运输安全的设计要点
大数据·网络
Geeys1 小时前
拼多多新店起流玩法:免费流量打底+付费流量爆发
大数据
日常筹谋记1 小时前
自动化仓储安全防护工况评估:明治传感器AS-33C技术适配性分析
大数据·运维·创业创新·业界资讯
updayday8541 小时前
离职域账号状态变更与Ping64操作记录核对
大数据·网络·数据库·安全·智能路由器
baopixiaoz1 小时前
BeeQuant × BeeAgent:用AI加速策略验证
大数据·人工智能·python·区块链
智商网输送线配件2 小时前
2026 自动化流水线配件采购难题破解:小批量混批与非标定制的供应链实测
大数据·人工智能·自动化·智商网·流水线设备配件
wabs6662 小时前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树
辛迪聊物业数字化3 小时前
智慧物业管理平台架构实践:从SaaS物业云到商管系统的全模块落地
大数据·微服务·php
SelectDB3 小时前
快手基于 Apache Doris 千亿多模态检索的实践
大数据·数据库·数据分析