软考20-上午题-串及其模式匹配

串(字符串)是一种特殊的线性表,其数据元素为字符。如:"abc"。

一、串的定义

由字符构成的有限序列,是一种线性表。

串的比较:以字符的ASCII值作为依据。比较操作从两个字符串的第一个字符开始,字符的码值大者所在的串大;若其中一个串先结束,以串长较大者为大。

0:48

A:65

a:97

1-1、真题

真题1:

软考20-上午题-串及其模式匹配_第1张图片

真题2:

软考20-上午题-串及其模式匹配_第2张图片

此类题,套个示例即可。 

二、串的模式匹配

串的定位操作,称为串的模式匹配。

设有两个串s和t,要在串s中找到与t相等的子串。通常将s称为目标串,t称为模式串,即:子串。

2-1、朴素模式匹配

软考20-上午题-串及其模式匹配_第3张图片

软考20-上午题-串及其模式匹配_第4张图片

时间复杂度:

软考20-上午题-串及其模式匹配_第5张图片

最好: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值 = 从1到i-1串中最长相等前后缀长度+1 。

特殊情况:

next[1] = 0

next[2] = 1

示例:求next[5]

软考20-上午题-串及其模式匹配_第6张图片

 len = 1时,前缀a = 后缀a,√

len = 2时,前缀aa = 后缀aa,√

len = 3时,前缀aaa = 后缀aaa,√

len = 4时,不可取,因为前缀包含了最后一个字符,后缀包含了第一个字符

所以,一共可取的最大len = 3,所以next[5] = 3+1 = 4。

KMP模式匹配的简单了解

软考20-上午题-串及其模式匹配_第7张图片

当发生不匹配时,j回退,但是i不回退了,i会一直前进!!!

具体j回退到哪一位,就用next[j]求值。 

因为,next[j] = next[5] = 4,所以,j回退到第四位。

软考20-上午题-串及其模式匹配_第8张图片

好处,前j位和主串是匹配的。 

2-3、真题

真题1:

软考20-上午题-串及其模式匹配_第9张图片

真题2:

软考20-上午题-串及其模式匹配_第10张图片

真题3:

软考20-上午题-串及其模式匹配_第11张图片

真题4:

软考20-上午题-串及其模式匹配_第12张图片

你可能感兴趣的:(软考中级,学习,笔记)