1. 问题描述
从一个主串中找出你想要的子串。以下均以主串=ababacabaaa,模式串=abaaa为例
2. 算法介绍
求解该问题,比较容易想到的一种方法就是暴力解法,将模式串与主串逐个比较。但是,这种解法的缺陷就是效率太低,会产生很多不必要的比较过程。这时人们就提出了KMP算法,即:构造一个next数组,通过next数组的值来确定模式串下一比较位置。这样虽然增大了空间复杂度,但是极大地提高了求解效率。
3. 代码解释
int* GetNext(char* ch, int length, int next[]){ //length为串ch的长度
next[1] = 0; //next数组从索引=1开始存放,ch也从索引=1开始存放字符
int i = 1, j = 0; //i为next数组的索引
while(i <= length){
if(j == 0 || ch[i] == ch[j])
next[++i] = ++j;
else
j = next[j];
}
}