在文本“abcaaabaabaaac”中查找子串“aabaaa”,写出采用BF算法和KMP算法进行串匹配的全过程(中间过程不能省略),并写出分别需要的字符比较次数
时间: 2024-06-06 11:10:45 浏览: 143
字符串的模式匹配详解--BF算法与KMP算法
5星 · 资源好评率100%
BF算法:
1. 在文本中从左往右依次匹配子串,先将子串的第一个字符与文本中的第一个字符比较,若相等,则继续比较子串的下一个字符与文本中的下一个字符,若不相等,则将子串向右移动一位,重新从文本的下一个字符开始匹配子串。
2. 比较过程如下:
第一次匹配:
a b c a a a b a a b a a a c
a a b a a a
比较次数:6
第二次匹配:
a b c a a a b a a b a a a c
a a b a a a
比较次数:6
第三次匹配:
a b c a a a b a a b a a a c
a a b a a a
比较次数:6
未匹配成功,继续将子串向右移动一位,重复以上步骤。
第四次匹配:
a b c a a a b a a b a a a c
a a b a a a
比较次数:6
没有其他匹配,匹配失败。
总共比较次数:24
KMP算法:
1. 构造子串的最长公共前后缀数组next,next[i]表示子串中以i结尾的子串的最长公共前后缀的长度。
2. 在文本中从左往右依次匹配子串,当子串中某个字符与文本中的某个字符不匹配时,根据next数组将子串向右移动一定的位数,从而继续匹配。
3. 比较过程如下:
构造最长公共前后缀数组:
a a b a a a
0 1 0 1 2 2
匹配过程:
a b c a a a b a a b a a a c
a a b a a a
比较次数:6
a b c a a a b a a b a a a c
a a b a a a
比较次数:1
a b c a a a b a a b a a a c
a a b a a a
比较次数:1
a b c a a a b a a b a a a c
a a b a a a
比较次数:1
没有其他匹配,匹配失败。
总共比较次数:9
阅读全文