poj3461(KMP演算法) (字串hash)

2021-08-18 21:20:44 字數 1102 閱讀 8938

題意:給出兩個字串,然你判斷第乙個字串在第二個字串中出現的次數。

思路:乙個裸的kmp演算法。主要內容在下面**中實現。

#include 

#include

#include

#include

#include

using

namespace

std;

int n;

const

int maxn = 1e4 + 5;

char a[maxn * 100], s[maxn];//a是待匹配字元,s是需要查詢的內容

int next[maxn];//next[i]表示前i位的前字尾匹配位數,字串從下標0開始

void init()

}int solve() //如果已經位於s的最後,說明成功完成匹配一次

}return ans;

}int main()

return

0;}

————————————————————————————————————————

2023年4月22日更新

這兩天學了一下字串雜湊,於是重做了此題,下面貼上**:

#include 

#include

#include

#include

#include

using

namespace

std;

typedef

unsigned

long

long ull;

const

int maxn = 1e7 + 5;

const ull has = 2333;

char s1[maxn], s2[maxn];

int hash()

if(a1 == a2) cnt++;

for(int i = len1+1 ; i <= len2; ++i)

return cnt;

}int t;

int main()

return

0;}

poj 3461 kmp演算法詳細解釋

題目鏈結 kmp演算法已經學過好多次了,但每一次都會忘記,因此打算在這裡藉著這一道模板題記錄下自己對kmp演算法的理解 kmp演算法的核心思想可以理解為 利用目標串自身的資訊,來減少匹配次數提高效率 next陣列的引入 next陣列就是用來幫助利用目標串自身的資訊的。我們這裡定義next陣列表示的是...

POJ 3461字串匹配演算法

t組資料,每組資料輸入兩個字串s,c 求s在c 現多少次,輸出次數。這道題是個字串匹配題,可以用kmp演算法來做,也可用字串hash。這兩個演算法的時間複雜度都是線性的。下邊分別介紹兩種演算法。字串hash 在c語言裡每個字元都可以看成乙個數字,範圍是0 127,比如 a 97 所以乙個字串可以看成...

POJ 3461題解(kmp演算法)文字串和子串匹配

poj3461傳送門 特殊的樣例 azaazazaza 輸出 所以next陣列要多一位,0 1 1 2 當模式串比較完之後要指向的是next陣列的最後一位,即開始從第二位字母比較,模擬過程如下 azazaza azazaza aza aza 所以這道題和最基礎的文字串和模式串比較不太一樣,是文字串和...