串的顺序存储结构的代码实现:
朴素匹配和KMP算法的代码实现:
第五章 串
所谓的序列,说明串的相邻字符之间具有前驱和后继的关系。
串的比较是通过组成串的字符之间的编码来进行的,字符的编码指的是字符在对应字符集中的序号。(字典排序法)
串的逻辑结构和线性表很相似,不同之处在于串针对的是字符集。
对于串的基本操作与线性表是有很大差别的。线性表更关注的是单个元素的操作,比如查找一个元素、插入和删除一个元素,串中更多的是查找子串的位置、得到指定位置的子串、替换子串等操作。
串的抽象数据类型
串的存储结构
串的顺序存储结构
串的顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列的。
串的链式存储结构
对于串的链式存储结构,结构中的每个元素数据是一个字符,如果也简单的应用链表存储串值,一个结点对应一个字符,就会存在很大的空间浪费。因此,可以考虑一个结点存放多个字符,最后一个结点若是未被占满时,可以用“#”或其他非串值字符补全,如下图:
串的链式存储结构除了在连接串与串操作时有一定方便之外,总的来说不如顺序存储灵活,性能也不如顺序存储结构好。
朴素的模式匹配算法
子串的定位操作通常称作串的模式匹配。
最好情况的时间复杂度为O(n+m),最差情况的时间复杂度为O((n-m+1)*m),
最好情况的时间复杂度为O(n+m),最差情况的时间复杂度为O((n-m+1)*m),
n为字符串长度,m为子字符串长度。
KMP模式匹配算法
书上的解释看的很晕,推荐阮一峰的博客: