字符串匹配算法SMA 总结之三:KMP算法

//Knuth-Morris-Pratt algorithm //preprocessing //next array void get_next(int*next,const char*pattern,const int pattern_len) { int i=0; int j=-1; next[0]=-1; while(i<pattern_len){ if (j==-1||pattern[i]==pattern[j]){ i++; j++; next[i]=j; }else{ j=next[j]; } } } int kmp(const char* text,const int text_len,const char* pattern,const int pattern_len) { int* next=new int[pattern_len]; //preprocessing get_next(next,pattern,pattern_len); //searching int i=0; int j=0; while (i<text_len&&j<pattern_len){ if (j==0||text[i]==pattern[j]){ i++; j++; }else{ j=next[j]; } } delete[] next; if (j>=pattern_len){ return i-j; }else{ return -1; } }

你可能感兴趣的:(算法,delete)