定义
串String:由零个或多个字符组成的有限序列,又名叫字符串
- 串中字符数目n称为串的长度,有限是指n为一个有限数值
- 零个字符的串称为空串(null String)长度为0,序列是指串的相邻字符之间具有前驱和后继的关系
- 空格串:只包含空格的串,
注意空格串与空串之间的区别:空格串是有长度的,可以为多个空格,空串长度为0- 子串与主串:串中任意个数的连续字符组成的子序列称为该串的子串,包含子串的串称为主串
- 子串的位置:就是子串的第一个字符在主串中的序号
串的比较
串的比较是通过组成串的字符之间的编码来进行比较的,而字符的编码指的是字符在对应的字符集中的序号
ASCII是American Standard Code for Information Interchange缩写
常用字符标准ASCII编码由7位二进制数表示一个字符,共表示128个字符,不够用
扩展ASCII码是由8位二进制数表示一个字符,总共可以表示256个字符
Unicode编码:由16位二进制数表示一个字符,可以表示65536个字符,其前256位与ASCII码完全一致
判断两个串是否相等,判断长度相等,对应位置的 字符相等。
2的8次方是16*16=256
2的16次方是256*256=65536
2的32次方是65536*65536=4294967296
65~90为26个大写英文字母,97~122号为26个小写英文字母
串的抽象数据类型
串的逻辑结构与线性表很相似,不过串针对的是字符集操作,也就是串中的元素都是字符
- 线性表更关注的是单个元素的操作,如删除,插入,查找一个元素
- 串更多的是查找子串的 位置,替换子串,得到指定位置的子串等
串的存储结构
串的存储结构与线性表相同:分为顺序存储结构、链式存储结构
顺序存储结构:是指用一组地址连续的存储单元来存储串中字符序列,一般用定长数组来定义存储区。
串值的存储空间可在程序执行过程中动态分配而得,堆,新new String,则在堆中开辟新空间
串的链式存储结构:串的结构中每个元素都是一个字符,如果一个节点对应一个字符,会造成很大空间浪费,所以存储时要考虑一个节点放一个还是多个字符,最后一个节点若是没被沾满,可以用“#”等其他非串数值字符补全。
串的链式存储结构除了在连接串上操作方便,总体不如顺序存储灵活,性能不如顺序存储结构。
模式匹配算法
- 暴力匹配,从头开始一个一个匹配,不成功,从主串的第二位开始从头开始匹配模式串,直到得出结果或返回-1
- KMP模式匹配算法:todo