由于是速成专题,因此内容不会十分全面,只会涵盖考试重点,各学校课程要求不同 ,大家可以按照考纲复习,不全面的内容,可以看一下小编主页数据结构初阶的内容,找到对应专题详细学习一下。
目录
一、串的基本概念
二、串的简单模式匹配算法(BF算法)
三、KMP算法
一、串的基本概念
串是由零个或多个字符组成的有限序列。一般表示为下面这种形式:
其中,S是串名,单引号括起来的字符序列是串的值;可以是字母、数字或其他字符;串中字符的个数称为串的长度。时的串称为空串。
串中任意个连续的字符组成的子序列称为该串的子串,包含子串的串相应地称为主串。
某个字符在串中的序号称为该字符在串中的位置。子串在主串中的位置以子串的第一个字符在主串中的位置来表示。
当两个串的长度相等且每个对应位置的字符都相等时,称这两个串是相等的。
由一个或多个空格组成的串称为空格串,其长度为串中空格字符的个数。
二、串的简单模式匹配算法(BF算法)
子串的定位操作通常称为串的模式匹配,它求的是子串在主串中的位置。
例:假设主串为a b a b c a b c a c b a b,子串为a b c a c。
与线性表相比,串的一系列操作最显著的特点就是通常会把串作为整体进行操作。
三、KMP算法
KMP算法与BF算法最大的区别就是,KMP算法中i不会后退,而BF算法的i后退,如上面例子中第一趟i=3与j=3不匹配,此时i后退到i=2的位置。而KMP算法里,i要么保持不动要么往前走。
想要学会KMP算法,就两步:先学会求next[j],再明白KMP算法的比较逻辑。
关于怎样求next[j],大家可以看一下这个视频:KMP算法计算next函数值
学会怎样计算后,再来学习KMP算法的基本逻辑:KMP 算法讲解(该视频只需观看1:17--3:17的内容)。
练手题:
下面直接给出答案:
next函数值:01122312