題意:給出兩個字串,然你判斷第乙個字串在第二個字串中出現的次數。
思路:乙個裸的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 所以這道題和最基礎的文字串和模式串比較不太一樣,是文字串和...