KMP算法

判断字符串str1是否含有子串str2

关键是实现next数组

next数组就是针对str2串中每个字符前的子串中存在的前缀与后缀匹配的最长长度

  • "前缀"指除了最后一个字符以外,一个字符串的全部头部组合;"后缀"指除了第一个字符以外,一个字符串的全部尾部组合。

  • 假设str2为“abababca”。

    • j=0,字符str2[j]=a,a前没有字符串,默认为next[0]=-1;

    • j=1,字符str2[j]=b,b前子串为“a”,前后缀不存在,默认为next[1]=0;

    • j=2,字符str2[j]=a,a前子串为“ab”,前后缀不存在相等,则next[2]=0;

    • j=3,字符str2[j]=b,b前子串为“aba”,前后缀最大相等为a,则next[3]=1;

    • 以此类推next[9]=[-1,0,0,1,2,3,4,0]

Last updated