這裡並不打算去詳細推導kmp的原理,以及精髓。只是整理了一下kmp演算法的模板、應用、理解的關鍵點。kmp演算法最基本的應用就是字串的匹配——給定乙個text串,乙個pattern串,詢問pattern串在text串中是否出現,以及出現幾次、位置等等。
class
kmpif
(pattern[i]
== pattern[j +1]
) next[i]
= j;}}
public
:kmp
(const string &pattern)
bool
issubstringoftext
(const string& text)
// 統計模式串在文字串出現的次數
intgettimes
(const string& text)
// 統計模式串在文字串的出現的次數
vector<
int>
getpositions
(const string& text)
if(text[i]
== pattern[j +1]
)if(j == len)
}return res;};
// 求陣列f 其中 f[i] 表示文字串以i結尾的子串與 pattern 串的字首相同的最大長度(這裡也是從1開始計數)
vector<
int>
getfarray
(const string& text)
if(text[i]
== pattern[j +1]
) f[i]
= j;
}return f;
}const vector<
int>
&getnext()
const
};
知識點 KMP演算法
update 20200316 重寫介紹 五年前好像什麼都沒寫一樣 1 前言 好吧我得承認這東西應該是早就要會了的。雖然感覺上用的不多,但是當我開始接觸ac自動機的時候,發現這是乙個很必要的知識點,所以今天來講一講。然而有乙個問題了 為什麼我一直沒有搞懂就是因為許多許多次我看網上的一些文章就發現總是...
模板相關知識點
模板就是乙個模具,通過這個模具我們倒入不同材質的東西,澆築成了乙個我們想要的那個材質的物品 這個材質在我看來就是我們的引數型別,我們各種屬性的型別.模板是 復用的一種手段,是泛型程式設計的基礎,所謂的泛型程式設計就是編寫與型別無關的 函式模板的寫法 template函式型別 函式名字 t 函式的引數...
字典樹 知識點 模板
模版鏈結 建樹 的過程剖析 include using namespace std define inf 0x3f3f3f3f define ll long long const int maxn 100000 const int maxm 1e6 100 const double pi acos ...