kmp用于一一匹配问题,如字符串的匹配。
一遇到匹配问题,最初大家想到的就是循环一一对比匹配了,但是那样太慢,这就需要用到kmp了,
它就是很快的,用到最大公共前后缀,
如ABCDABC这个串,我们匹配ABCDABTBCDABC这个长串,当匹配到第7个字符T的时候就不匹配了,用kmp我们就不用直接移到B开始再比一次,而是直接移到第5位来比较,这样可以减少时间
如果不懂可以去听大佬讲解的视频,
以下是记录公共前后缀数的数组
void kmpnext(char s[]){ int i=0,j=-1; int n=strlen(s); ne[0]=-1; while(i
以下是kmp的比较过程
int kmp(char *a,char *b)//匹配ab两串,a为父串{ int i=0,j=0; int len1=strlen(a); int len2=strlen(b); getnext(b); while(i
这里是相关习题
包括
字符串的最大最小表示;
kmp模板;
扩展kmp;