文章目录
- 串 - 顺序
- 一、串的表示及实现
- 1.1 串的概念
- 1.2 串的初始化
- 1.3 复制串
- 1.4 串的判空
- 1.5 串的比较
- 1.6 串的长度
- 1.7 清空串
- 1.8 串的拼接
- 1.9 串的截取
- 1.10 插入子串
- 1.11 串的打印
- 二、串的应用
- 2.1 串的模式匹配 - 基本操作
- 2.2 串的模式匹配 - BF
- 2.3 串的模式匹配 - KMP
- next数组
- 测试
串 - 顺序
一、串的表示及实现
1.1 串的概念
(1)串(String
):是零个或多个字符组成的有限序列。一般记为: S='a1a2…an' (n≥0)
。
- 其中S为串名,用单引号括起来的为串值, n为串的长度。
(2)子串
:串中任意个连续的字符组成的子序列称为该串的子串。
(3)主串
:包含子串的串相应地称为主串。
- 子串在主串中的位置通常将字符在串中的序号称为该字符在串中的位置。子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。
(5)空格串
:由一个或多个称为空格的特殊字符组成的串,其长度为串中空格字符的个数。
(6)空串
:无任何字符组成的串,其串长度为零。
(7)串相等
:只有当两个串的长度相等,并且每个对应位置的字符都相等时才相等。
串的基本操作:
返回顶部
1.2 串的初始化
返回顶部
1.3 复制串
返回顶部
1.4 串的判空
返回顶部
1.5 串的比较
返回顶部
1.6 串的长度
返回顶部
1.7 清空串
返回顶部
1.8 串的拼接
返回顶部
1.9 串的截取
返回顶部
1.10 插入子串
返回顶部
1.11 串的打印
返回顶部
二、串的应用
模式匹配:求子串(模式串)在主串(目标串)中的位置,若子串出现在主串中,则匹配成功,否则匹配不成功。常应用于文章中关键字的查找。
2.1 串的模式匹配 - 基本操作
返回顶部
2.2 串的模式匹配 - BF
简单的模式匹配: 和
分别指向主串
中的字符 和 子串
中的字符,如果
,
和
分别加
,指向下一个字符,否则,
退回到本趟匹配起始位置的下一个位置,
缺点:存在回溯的问题!
返回顶部
2.3 串的模式匹配 - KMP
KMP算法核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数,从而达到快速匹配的目的。
KMP算法与BF算法(暴力算法)区别在于,主串的
不会回退,并且模式串的
假设此时 i 指向 g,j 指向 c,匹配失败。
- 此时 i 不进行回退,因为在这个地方前,两个字符串是有一部分相同的。
- 我们观察,当我们保持 i 不动, j 退回到第三个位置也就是 c 时,不难发现两个字符串前 a b 是一样的。
- 因此,我们需要借助 next 数组,帮助我们找到 j 需要回退的位置。
next数组
- KMP算法的精髓就是next数组,next[j]=k,表示不同的 j 对应一个 k 值;k 表示模式串下标为 j 的元素,匹配失败时,要退回的位置。
- 最长前后相等子串
-
next[j] = 匹配字符个数 + 1
参考视频:三分钟搞定 数据结构 串 KMP算法next数组求值
返回顶部
测试
返回顶部