知识杂货铺

不卖切糕

View on GitHub
16 March 2018 13:36

《大话数据结构》笔记 - 第5章 串

by 宋强

字符串大小的定义

两种情况下字符串一小于字符串二:

串的存储形式通常是使用顺序存储结构,链式存储结构只在拼接和断开字符串的时候具有性能优势,在其他方面不如顺序存储结构更具有优势。

字符串的模式匹配

朴素模式匹配

就是最简单的从第一个字符开始依次匹配。

KMP模式匹配

推导next数组的公式

void getNext(char *p, int *next)
{   
    int i = 0, j = -1;
    
    while (i < strlen(p)) { 
        if (j == -1 || p[i] == p[j]) { //情况1
            ++i;
            ++j;
            next[i] = j;    //匹配则自增,不匹配的字符串都会导致j==-1之后第一个给0,之后判断后面是否有匹配。
        } else {            //情况2
            j = next[j];    //图5-7-4右下角子图讲的子串的j也不必重头开始。
        }
    }
}

对于一个匹配串”abcabd”来说,第一个a肯定是0,后面b的时候先进条件1将其给0之后判断next[i]和next[j]是否匹配,匹配就继续找,不匹配就将j复位。

应用上面的getNext得到匹配算法

tags: 笔试 - 数据结构