课堂互动
隐藏答案 | 返回首页 作者:欧新宇(Xinyu OU)
最后更新:2023-10-03
1. 设有两个串S1和S2,求S2在S1中首次出现的位置的运算称为( )。
A. 求子串
B. 判断是否相等
C. 模式匹配
D. 连接
答案及解析:C
本题易错选项是A,求子串操作是从串S中截取第i个字符起长度为l的子串,A错。BD明显错。
2. 已知串S='aaab',其next数组值为( )。
A. 0123
B. 0112
C. 0231
D. 1211
答案及解析:A
按规则next[1]=0,next[2]=1。对于j=3,部分匹配串为a,长度为1,因此next[3]=2。对于j=4,部分匹配串为aa,长度为2,因此next[4]=3。最终,next数组为[0123]
3. KMP算法的特点是在模式匹配时指示主串的指针( )。
A. 不会变大
B. 不会变小
C. 都有可能
D. 无法判断
答案及解析:B
在KMP算法的比较过程中,主串永不回溯,所以主串的指针不会变小。选B。
4. 设主串的长度为n,子串的长度为m,则简单的BF模式匹配算法和KMP算法的时间复杂度为( )。
A. O(mn) O(m+n)
B. O(n) O(m+n)
C. O(mn) O(n)
D. O(m+n) O(m+n)
答案及解析:A
尽管实际应用中,一般情况下简单的BF模式匹配算法的平均时间复杂度近似为O(m+n),但它的理论时间复杂度还是O(mn)。KMP算法的时间复杂度为O(m+n)。
5. 串是一种特殊的线性表,其特殊性体现在( )。
A. 可以顺序存储
B. 数据元素是一个字符
C. 可以链式存储
D. 数据元素可以是多个字符
答案及解析:B
串是一种逻辑结构,因此和大多数数据结构相同,都可以使用顺序存储或者链式存储进行存储,因此,选项A, C是一种常态,并不是特性。选项D体现的是串允许多个字符,但并不是它的根本特性,串的根本性质是,它是针对于字符的一种数据结构。因此,选项B是正确选项;
6. 在执行BF算法时,最坏的情况为每趟匹配比较,不等的字符出现的位置均为( )。
A. 模式串的最末字符
B. 主串的首字符
C. 模式串的首字符
D. 主串的最末字符
答案及解析:A
由于每次比较,模式串都会被反复比较的,而在BF算法中,最坏情况就是每次指针都从最后一位回退到第一位。因此当每次比较都是模式串的最末字符出现不等时,每次都将回退到起始位置的情况将会发生,此时属于最坏情况,此时的时间复杂度为O(mn)。
1. 若串S=“structure”,那么以“t”为首到子串有( )个。
A. 11
B. 12
C. 24
D. 36
答案及解析:B
该题求的以“t”为首的子串,需要先考察串S中“t”的个数,不难发现,总共有2个。因此,以第一个t为首的子串包括:t, tr, tru, truc, truct, tructu, tructur, tructure,共8个;以第二给t为首的子串包括:t, tu, tur, ture,共4个。因此,总共有12个。
2. 下面关于串的叙述中,( )是不正确的。
A. 串是字符的有限序列
B. 空串是由空格构成的串
C. 模式匹配是串的一种重要运算
D. 串既可以采用顺序存储,也可以采用链式存储
答案及解析:B
空串是元素个数为零的串,而空格串是指由空格构成的串。
3. 串的长度是指( )。
A. 串中所含不同字母的个数
B. 串中所含字符的个数
C. 串中所含不同字符的个数
D. 串中所含非空格字符的个数
答案及解析:B
4. 串的模式匹配是指()。
A. 判断两个串是否相等
B. 对两个串进行大小比较
C. 查找某字符在主串中第一次出现的位置
D. 查找某子串在主串中第一次出现的第一个字符的位置
答案及解析:D
在串的模式匹配中,设有两个字符串S和T,设S为主串,T为模式串。在主串S中查找与模式T相匹配的子串,如果匹配成功,确定相匹配的子串中的第一个字符在主串S中出现的位置。
5. 设主串S="abccdcdccbaa",子串T="cdcc",用BF算法匹配第( )次可以匹配成功。
A. 5
B. 6
C. 7
D. 8
答案及解析:B
BF算法在进行匹配的时候,每一轮都需要执行回退操作,其中主串回退到上一轮起点的下一个结点,子串回退到子串本身的起点。本题中,匹配值为6-9的位置,因此总共需要执行6次匹配。
1. 串'ababaaababaa'的next数组值为( )。
A. 01234567899
B. 012121111212
C. 011234223456
D. 0123012322345
答案及解析:C
j | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
字符串 | a | b | a | b | a | a | a | b | a | b | a | a |
部分匹配字符 | - | - | - | a | ab | aba | a | a | ab | aba | abab | ababa |
部分长度 | 0 | 0 | 0 | 1 | 2 | 3 | 1 | 1 | 2 | 3 | 4 | 5 |
next | 0 | 1 | 1 | 2 | 3 | 4 | 2 | 2 | 3 | 4 | 5 | 6 |
2. 串'ababaaababaa'的next数组为( )。
A. -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 8
B. -1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1
C. -1, 0, 0, 1, 2, 3, 1, 1, 2, 3, 4, 5
D. -1, 0, 1, 2, -1, 0, 1, 2, 1, 1, 2, 3
答案及解析:C
注意本题的解题方法和常规方法相同,但此题起始值为-1,即数组位序从-1开始,因此需要将获得的next值减去1。
j | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
字符串 | a | b | a | b | a | a | a | b | a | b | a | a |
部分匹配字符 | - | - | - | a | ab | aba | a | a | ab | aba | abab | ababa |
部分长度 | 0 | 0 | 0 | 1 | 2 | 3 | 1 | 1 | 2 | 3 | 4 | 5 |
next | 0 | 1 | 1 | 2 | 3 | 4 | 2 | 2 | 3 | 4 | 5 | 6 |
最终,next数组 = [011234223456] - 1 = [-100123112345]。
3. 串'ababaaababaa'的nextval数组为( )。
A. 0, 1, 0, 1, 1, 2, 0, 1, 0, 1, 0, 2
B. 0, 1, 0, 1, 1, 4, 1, 1, 0, 1, 0, 2
C. 0, 1, 0, 1, 0, 4, 2, 1, 0, 1, 0, 4
D. 0, 1, 1, 1, 0, 2, 1, 1, 0, 1, 0, 4
答案及解析:C
j | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
字符串 | a | b | a | b | a | a | a | b | a | b | a | a |
部分匹配字符 | - | - | - | a | ab | aba | a | a | ab | aba | abab | ababa |
部分长度 | 0 | 0 | 0 | 1 | 2 | 3 | 1 | 1 | 2 | 3 | 4 | 5 |
next | 0 | 1 | 1 | 2 | 3 | 4 | 2 | 2 | 3 | 4 | 5 | 6 |
nextval | 0 | 1 | 0 | 1 | 0 | 4 | 2 | 1 | 0 | 1 | 0 | 4 |
4.【2015统考真题】已知字符串S为'abaabaabacacaabaabcc',模式串t为'abaabc'。
采用KMP算法进行匹配,第一次出现“失配”(s[i]≠t[j])时,i=j=5,则下次开始匹配时,i和j的值分别是( )。
A. i=1,j=0
B. i=5,i=0
C. i=5,i=2
D. i=6,j=2
答案及解析:C
在KMP算法中,主串指针永不会退,因此i=5。当j=5时,新的j值next[5]=2。具体解法, next[1]=0, next[2]=1, next[3]=1, next[4]=2, next[5]=2。
5.【2019统考真题】设主串T='abaabaabcabaabc',模式串S='abaabc',采用KMP算法进行模式匹配,到匹配成功时为止,在匹配过程中进行的单个字符间的比较次数是( )。
A. 9
B. 10
C. 12
D. 15
答案及解析:B
此题主要考察模式串回退的距离,对于模式串abaabc,可以得到next数组[011223]。根据题意可知,第一轮匹配,总共比较了6次。失配时,j=6,next[6]=3,因此,下一轮匹配时,使用模式串的3号位和主串的6号进行对比,总共比较了4次,匹配成功。因此,总比较次数为6+4=10。
1. 若串 S = "software",其子串的数目是( )。
A. 8
B. 37
C. 36
D. 9
答案及解析:B
子串是指地址连续的字符的集合,在本题中包含8个字符的子串有1个,7个字符的子串2个,以此类推,子串的数量=8+7+6+5+4+3+2+1=37。
2. 串"ababaabab"的nextval数组为( )。
A. 010104101
B. 010102101
C. 010100011
D. 010101011
答案及解析:A
j | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
字符串 | a | b | a | b | a | a | b | a | b |
next | 0 | 1 | 1 | 2 | 3 | 4 | 2 | 3 | 4 |
nextval | 0 | 1 | 0 | 1 | 0 | 4 | 1 | 0 | 1 |
3.(填空题)已知模式串 t="abcaabbabcab",试写出用KMP算法求得的每个字符对应的next和nextval数组值。next =_______,nextval = ________。
答案及解析:next[] = 011122312345, nextval[] = 011021301105
j | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
字符串 | a | b | c | a | a | b | b | a | b | c | a | b |
部分匹配字符 | - | - | - | - | a | a | ab | - | a | ab | abc | abca |
部分长度 | 0 | 0 | 0 | 0 | 1 | 1 | 2 | 0 | 1 | 2 | 3 | 4 |
next | 0 | 1 | 1 | 1 | 2 | 2 | 3 | 1 | 2 | 3 | 4 | 5 |
nextval | 0 | 1 | 1 | 0 | 2 | 1 | 3 | 0 | 1 | 1 | 0 | 5 |
4. (应用题)设有字符串S="aabaabaabaac",P="aabaac"。
1) 求出P的next数组。
2) 若S做主串,P做模式串,试给出KMP算法的匹配过程。
答案及解析:
(1)next数组计算方法:next[1] = 0; next[2] = 1; 存在部分匹配 ? n+1 : 1
j | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
字符串 | a | a | b | a | a | c |
部分匹配字符 | - | - | a | - | a | aa |
部分长度 | 0 | 0 | 1 | 0 | 1 | 2 |
next | 0 | 1 | 2 | 1 | 2 | 3 |
(2)KMP算法的匹配过程
主串 | a | a | b | a | a | b | a | a | b | a | a | c |
a | a | b | a | a | c |
主串 | a | a | b | a | a | b | a | a | b | a | a | c |
a | a | b | a | a | c |
主串 | a | a | b | a | a | b | a | a | b | a | a | c |
a | a | b | a | a | c |