hiho一下第3周 1015 KMP演算法

2021-07-11 04:36:52 字數 984 閱讀 8802

在原串s中尋找模式串p的位置,如

即在位置15處找到模式串p

模式串ab

cdab

d最大相同前字尾00

0012

0next-10

0001

20

1、若p[k] == p[j],則next[j+1] = k+1(next陣列是最大前字尾長度表右移的結果)

2、若p[k] != p[j],則k = next[k],再去比較p[next[k]]與p[j]是否相等

經過上述過程可以得到最長相同前字尾右移的netxt陣列,考慮以下情況

此時若將陣列移動到p[1]處,顯然s[9]=』c』與p[1]=』b』不同,原因是p[k]==p[j]時,若p[k+1]=p[j+1],此時將next陣列再一次遞迴得到next[j]=next[k],**如下

class mykmp ;     //全部賦值為0

string p;

public:

mykmp(string &s) else

} else }}

int search(string &s) else

if (j == plen) ans++; //此時已經可以結束

//此處為針對此題的修改

}return ans;}};

查詢的過程只需要跟著next陣列跳轉就好,優化後的next陣列如下

模式串abc

dabd

next-10

00-10

20

hiho一下第143周

題目1 hiho密碼 時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述 小ho根據最近在密碼學課上學習到的知識,開發出了一款hiho密碼,這款密碼的秘鑰是這樣生成的 對於一種有n個字母的語言,選擇乙個長度為m的單詞 將組成這個單詞的所有字母按照順序不重複的寫出 即遇到相...

hiho一下 第197周 逆序單詞

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 在英文中有很多逆序的單詞,比如dog和god,evil和live等等。現在給出乙份包含n個單詞的單詞表,其中每個單詞只出現一次,請你找出其中有多少對逆序單詞。第1行 1個整數,n,表示單詞數量。2 n 50,000。第2.n ...

hiho一下 第二週

題目名稱 trie樹 小hi和小ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的學習道路上一同前進。這一天,他們遇到了一本詞典,於是小hi就向小ho提出了那個經典的問題 小ho,你能不能對於每乙個我給出的字串,都在這個詞典裡面找到以這個字串開頭的所...