字串匹配的KMP演算法實現

2021-04-22 08:34:54 字數 834 閱讀 4211

問題源自資料結構書。

問題:字串src中含有模式串pat的個數

舉例:src= 00000111111111101010111010101001

pat=110

src中含有多少個pat?

分析:沒有回溯的kmp演算法。

1)首先實現乙個next數字,其中的值,是匹配失誤之後的下一次匹配的位置。next[0]=-1; next[1]=0;後面的多數都不是0。這個實際是乙個kmp的匹配過程;

2)然後把pat在src中進行匹配,又是乙個kmp的匹配過程。

**:const

int pat_length = 3;

int src_length = 0;

// 計算next,一次kmp演算法

bool nextpos(const

char* ppat, int* next)

else

}  while ( index < pat_length - 1 );

return

true;

}// pat與src進行匹配,一次kmp演算法

int match(const

char* psrc, const

char* ppat, const

int* next)

else

if ( patindex == pat_length )   //match

}    

return times;

}//測試程式

int main(int argc, char* argv)

getchar();

return 0;

}

用KMP演算法實現字串匹配

如果對於乙個字串a,將a的前面任意一部分挪到後邊去形成的字串稱為a的旋轉詞。比如a 12345 a的旋轉詞有12345,23456,34512,45123和51234。對於兩個字串a和b,請判斷a和b是否互為旋轉詞。給定兩個字串a和b及他們的長度lena,lenb,請返回乙個bool值,代表他們是否...

KMP字串模式匹配演算法實現

kmp演算法是字串模式匹配演算法中較為高效的演算法之一,其在某次子串匹配母串失敗時並未回溯母串的指標而是將子串的指標移動到相應的位置。嚴蔚敏老師的書中詳細描述了kmp演算法,同時前面的例子中也描述了子串移動位置的陣列實現的演算法。前面你已經實現了子串移動的陣列,現在就來利用該陣列來實現kmp模式匹配...

KMP字串模式匹配演算法實現

給定字串s和匹配串t,請你求出匹配串t在s中第一次正確匹配的索引位置。若匹配失敗則返回0。如題,c 版本的kmp 模版如下 樣例輸入 string str thisisalongstring isa nosubstring subt 樣例輸出 1 5 0 include include includ...