使用KMP演算法求子串出現次數

2021-06-05 22:08:31 字數 766 閱讀 5322

1. kmp演算法:對應長度為n的目標串和長度為m的模式串,kmp演算法的複雜度是o(m+n).其中o(m)的時間用於需找模式串的失效函式,o(n)的時間用於匹配。演算法思想說起來比較麻煩,但是並不複雜,參考資料結構的書吧。

2. 下面給出kmp的**search()和子串出現次數**count().其中count()的複雜度是o(n),整體複雜度也是o(m+n).

#include #include #include using namespace std;

void fail(const char* pat, int* f)

}}int search(const char* tg, const char *pt, const int* f)

else

}return ptpos < ptlen ? -1: tgpos - ptlen;

}int count(const char* tg, const char *pt, const int* f)

else

if (ptpos >= ptlen )

}return count;

}int main()

{ const char *tag="abcbcbcbc";

const char *pat="bcbc";

int len=strlen(pat);

int *f =new int[len];

fail(pat,f);

cout <<"失效函式位置:\n";

for(int i=0;i

使用KMP演算法求子串出現次數

1.kmp演算法 對應長度為n的目標串和長度為m的模式串,kmp演算法的複雜度是o m n 其中o m 的時間用於需找模式串的失效函式,o n 的時間用於匹配。演算法思想說起來比較麻煩,但是並不複雜,參考資料結構的書吧。2.下面給出kmp的 search 和子串出現次數 count 其中count ...

KMP 計算模式串出現的次數

參考資料 從頭到尾徹底理解kmp 實現 182538 solution 一 問題描述 判斷一段文字 原串,str src,長度為len src 裡面是不是存在那麼一些特殊的文字 模式串,str ptn,長度為len ptn 如若存在,計算該模式串出現的次數。輸入 第一行乙個整數n,表示測試資料組數。...

用TSQL求子串在父串中出現的次數

導言 由於sql server本身沒提供計算乙個字串在另乙個字串重複次數的函式,大家按照自己的思路使用自定義函式實現了該功能,並在網上傳播。我閱讀了同事從網上獲取的該函式的乙個版本後,便發現該函式存在乙個明顯的邏輯錯誤。為了進一步確認這個問題,我在google上搜尋相關關鍵字,發現該功能多數的實現思...