在前面对KMP算法做了各种的讲解之后,现在要对这个算法做一个代码的实现了:
int KmpSearch(char *s, char *p) { int i = 0; int j = 0; int sLen = strlen(s); int pLen = strlen(p); while(i < sLen && j < pLen) { //如果j = -1,或者当前字符匹配成功(即S[i] == P[j]),都令i++,j++ if(j == -1 || s[i] == p[j]) { i++; j++; } else { //如果j != -1,且当前字符匹配失败(即S[i] != P[j]),则令 i 不变,j = next[j] //next[j]即为j所对应的next值 j = next[j]; } }//while if(j == pLen) { return i - j; } else { return -1; } }
KMP算法时间复杂度分析:
如果文本串的长度为n,模式串的长度为m,那么匹配过程的时间复杂度为O(n),算上计算next的O(m)时间,KMP的整体时间复杂度为O(m + n)。
时间: 2024-10-25 02:53:33