1. 程式人生 > >自寫KMP模板

自寫KMP模板

ext spa == ret tor 數組 pos urn ()

 1 int* Getnext(char *p,int len_p){//p為模式串 
 2     int *Next = new int[len_p];
 3     Next[0] = -1;
 4     int j = -1,i=0;
 5     while(i < len_p){//自身與自身匹配 
 6         while(j != -1&&p[j]!=p[i])//移動匹配串 
 7             j = Next[j];
 8         j+=1;
 9         Next[++i] = j; 
10     }
11
return Next; 12 } 13 vector<int>* Kmp(char *s,char *p,int len_s,int len_p){//s為主串,p為匹配串 14 int *Next = Getnext(p,len_p);//求得Next數組 15 int j = 0;//j為匹配串匹配到的位置 16 vector<int>* ans = new vector<int>();//ans為匹配到的主串的開頭下標位置 17 for(int i=0;i < len_s;i++){ 18 while
(j != -1 && s[i] != p[j]) 19 j = Next[j]; 20 j+=1; 21 if(j == len_p){//匹配串匹配完畢 22 ans->push_back(i - len_p + 1); 23 j = Next[j];//j退回到Next[j] 24 } 25 } 26 return ans; 27 }

自寫KMP模板