自寫KMP模板
阿新 • • 發佈:2018-03-16
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 } 11return 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模板