第四章 串

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

【重点】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 小时前
递归解题指南:LeetCode经典题全解析
数据结构·算法·leetcode·职场和发展·排序算法·深度优先·递归
AC赳赳老秦3 小时前
供应链专员提效:OpenClaw自动跟踪物流信息、更新库存数据,异常自动提醒
java·大数据·服务器·数据库·人工智能·自动化·openclaw
QYR-分析3 小时前
高功率飞秒激光器行业发展现状、市场机遇及未来趋势分析
大数据·人工智能
微擎应用4 小时前
全渠道批发订货商城小程序管理系统
大数据·小程序
卷毛迷你猪4 小时前
快速实验篇(A1)干旱气象数据上传至HDFS
大数据·hadoop·hdfs
Dlrb12116 小时前
C语言-指针数组与数组指针
c语言·数据结构·算法·指针·数组指针·指针数组·二级指针
头歌实践平台7 小时前
招聘大数据可视化
大数据·python
头歌实践平台7 小时前
Hadoop开发环境搭建
java·大数据·hadoop
Alter12307 小时前
从“力大砖飞”到“拟态共生”,新华三定义AI基础设施的系统级进化
大数据·运维·人工智能