kmp就是不用每次比較不同後就直接重第二個字元重新開始,例如模式串"abcabc",主串"abcabeabcabc",當比較到主串第6位時發現不同,暴力比較會直接從模式串重新開始比較,然後主串從第二位開始
kmp的話由於前面「abcab」中有ab重複,所以主串不用變,模式串直接用第3位開始。
所以要知道每次比較結束後的下一步next陣列時kmp的關鍵。
#include #include #include using namespace std;
vectorgetnext(string str){
vectorres;
for(int i=0;inext=getnext(patter);
while((main_index注意while判斷條件,我在mac跑時main_index 給定乙個字串 s 和乙個字元模式 p 實現乙個支援 和 的萬用字元匹配。可以匹配任何單個字元。可以匹配任意字串 包括空字串 兩個字串完全匹配才算匹配成功。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例 1 輸入 s aa p a ... 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸... 今天終於開啟的第二個專題的刷題之旅堆,不過第乙個專題棧還有乙個小問題沒解決就是利用遞減棧去解決接雨水的問題,雖然那道題我用動態規劃的問題解決出來了,我記得看到過一道面試題,問棧和堆有什麼區別。通過搜尋網上的資料總結如下。棧 stack 由系統分配記憶體,速度較快,但是自己無法掌握。堆 一般用兩種方法...LeetCode刷題筆記 萬用字元匹配
Leetcode刷題之括號
leetcode刷題之堆