kmp算法
kmp算法
//计算偏移值 void get_next(const char pat[], int next[]) { memset(next,0,sizeof(next)); int i=-1,j=0;next[0]=-1; while(j < strlen(pat)) { if(i==-1||pat[i]==pat[j]) { i++; j++; next[j]=i; } else { i=next[i]; } } } // kmp算法 int kmp(const char *str, const char*pat, int *next) { int i=0,j=0,len1=strlen(str),len2=strlen(pat); while((i<len1)&&(j<len2)) { if(j==-1||str[i]==pat[j]) { j++; i++; } else { j=next[j]; } } if(j==len2) return i-len2; else return -1; }
本博客内容均来自网络,如有雷同,是我抄袭!