软考20-上午题-【数据结构】-串及其模式匹配
串-字符串,朴素模式匹配,KMP模式匹配
串(字符串)是一种特殊的线性表,其数据元素为字符。如:"abc"。
一、串的定义
由字符构成的有限序列,是一种线性表。
1-1、串的比较
以字符的ASCII值作为依据。比较操作从两个字符串的第一个字符开始,字符的码值大者所在的串大;若其中一个串先结束,以串长较大者为大。
0:48
A:65
a:97
1-2、真题
真题1:

真题2:

此类题,套个示例即可。
二、串的模式匹配
子串的定位操作,称为串的模式匹配。
设有两个串s和t,要在串s中找到与t相等的子串。通常将s称为目标串,t称为模式串,即:子串。
2-1、朴素模式匹配


时间复杂度:

子串长度为m,目标串长度为n:
- 最好:O(m)
- 最坏:O(n*m),(n-m+1)*m
- 平均:O(n+m)
2-2、KMP模式匹配
朴素模式匹配的改进。
改进之处:匹配过程,出现相比较的字符串不相等时,不需要回溯主串的指针,利用已经得到的部分匹配结果,将子串向后滑动尽可能远的距离,再继续比较。
计算子串向后滑动尽可能远的距离,就是计算next[j]的值。
- 前缀:包含第一个字符,但不包含最后一个字符的子串。
- 后缀:包含最后一个字符,但不包含第一个字符的子串。
- 最长相等前后缀:前缀和后缀相等的最长子串。
例如字符串“abca”
- 前缀:{a,ab,abc}
- 后缀:{a,ca,bca}
- 最长相等前后缀:a
【注意】:
子串要是连续的!
第i个字符的next值 = next[i] = 从1到 i-1串中最长相等前后缀长度+1 。
特殊情况:
next[1] = 0
next[2] = 1
示例:求next[5]

len = 1时,前缀a = 后缀a,√
len = 2时,前缀aa = 后缀aa,√
len = 3时,前缀aaa = 后缀aaa,√
len = 4时,不可取,因为前缀包含了最后一个字符,后缀包含了第一个字符
所以,一共可取的最大len = 3,所以next[5] = 3+1 = 4。
KMP模式匹配的简单了解

当发生不匹配时,j回退,但是i不回退了,i会一直前进!!!
具体j回退到哪一位,就用next[j]求值。
因为,next[j] = next[5] = 4,所以,j回退到第四位。

好处,前j位和主串是匹配的。
2-3、真题
真题1:

真题2:


真题3:

真题4:

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)