大话数据结构——串
2016-06-12 11:46
316 查看
串(string)是由零个或多个字符组成的有限序列,又名字符串。
字符串有很多函数,replace、ToUpper、ToLower(转小写)、Trim(去掉两边空格)、IndexOf(从左到右查找子串的位置)、SubString、SubLength等等。
1. 顺序存储结构
串的顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列的。按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区。
用“\0”来表示串的终结,不计入串长度,但是计入数组长度。
两个长度不同的串不可能相等。
2. 链式存储结构
要考虑一个结点是存放一个字符(会造成很大的空间浪费)还是多个字符。除了链接串与串的操作有一定方便外,总的来说不如顺序存储量或,性能也不如顺序存储结构好。
时间复杂度:O(1)–最好;O(n+m)–平均;O(n-m+1)*m–最不好
next数组(改进朴素匹配):后面一个与前面一个字符比较,若相等,k值是2,两个字符k值是3,n个k值相等就是n+1。第一个为0,其他不匹配的情况为1。
nextval数组(改进的KMP匹配):先计算next数组,逐个字符比较,若相等,nextval[j]=nextval[j],若不等,推倒重新比较,nextval[j]=next[i]。
n(n+1)/2 + 1
设模式串的长度为m,目标串的长度为n,当n≈m且处理只匹配一次的模式时,朴素的匹配(即子串定位函数)算法所花的时间代价可能会更为节省。
字符串有很多函数,replace、ToUpper、ToLower(转小写)、Trim(去掉两边空格)、IndexOf(从左到右查找子串的位置)、SubString、SubLength等等。
一、串的存储结构
串的存储结构与线性表相同,分为顺序存储结构和链式存储结构。1. 顺序存储结构
串的顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列的。按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区。
用“\0”来表示串的终结,不计入串长度,但是计入数组长度。
两个长度不同的串不可能相等。
2. 链式存储结构
要考虑一个结点是存放一个字符(会造成很大的空间浪费)还是多个字符。除了链接串与串的操作有一定方便外,总的来说不如顺序存储量或,性能也不如顺序存储结构好。
二、朴素的模式匹配算法
串的模式匹配:串的定位操作。时间复杂度:O(1)–最好;O(n+m)–平均;O(n-m+1)*m–最不好
三、KMP模式匹配算法
KMP算法可以大大减少重复遍历的情况。next数组(改进朴素匹配):后面一个与前面一个字符比较,若相等,k值是2,两个字符k值是3,n个k值相等就是n+1。第一个为0,其他不匹配的情况为1。
nextval数组(改进的KMP匹配):先计算next数组,逐个字符比较,若相等,nextval[j]=nextval[j],若不等,推倒重新比较,nextval[j]=next[i]。
三、题目
n 个字符构成的字符串,假设每个字符都不一样,问有多少个子串?n(n+1)/2 + 1
设模式串的长度为m,目标串的长度为n,当n≈m且处理只匹配一次的模式时,朴素的匹配(即子串定位函数)算法所花的时间代价可能会更为节省。
相关文章推荐
- 读《数据结构》1-4章[线性结构]
- 数据结构(树链剖分,线段树):SDOI 2016 游戏
- 数据结构 Merge合并排序
- 万山千山都是情,你说行我就行之大型数据结构纪录篇之顺序
- HDUOJ_1166_敌兵布阵_线段树
- SDUTACM数据结构上机测试2-1:单链表操作A
- c/c++数据结构 栈和队列
- [python]修改SQL返回值数据结构
- 编程就是算法和数据结构,算法和数据结构是编程的灵魂。
- 优先级队列之堆实现
- 数据结构与算法之七 栈
- 数据结构与算法之七 栈
- 数据结构与算法之七 栈
- 【数据结构】二叉搜索树
- 【数据结构】AVL树
- 【数据结构】常见的7种比较排序算法2
- 【数据结构】非比较排序算法(实现计数排序和基数排序)
- 【数据结构】常见的7种比较排序算法1
- 树的相关必备理论
- 数据结构与算法之六 双向链表和循环链表