hihocoder 1015 KMP演算法 (KMP模板)
時間限制:1000ms
單點時限:1000ms
記憶體限制:256MB
描述
小Hi和小Ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的學習道路上一同前進。
這一天,他們遇到了一隻河蟹,於是河蟹就向小Hi和小Ho提出了那個經典的問題:“小Hi和小Ho,你們能不能夠判斷一段文字(原串)裡面是不是存在那麼一些……特殊……的文字(模式串)?”
小Hi和小Ho仔細思考了一下,覺得只能想到很簡單的做法,但是又覺得既然河蟹先生這麼說了,就肯定不會這麼容易的讓他們回答了,於是他們只能說道:“抱歉,河蟹先生,我們只能想到時間複雜度為(文字長度 * 特殊文字總長度)的方法,即對於每個模式串分開判斷,然後依次列舉起始位置並檢查是否能夠匹配,但是這不是您想要的方法是吧?”
河蟹點了點頭,說道:”看來你們的水平還有待提高,這樣吧,如果我說只有一個特殊文字,你能不能做到呢?“
小Ho這時候還有點暈暈乎乎的,但是小Hi很快開口道:”我知道!這就是一個很經典的模式匹配問題!可以使用KMP演算法進行求解!“
河蟹滿意的點了點頭,對小Hi說道:”既然你知道就好辦了,你去把小Ho教會,下週我有重要的任務交給你們!“
”保證完成任務!”小Hi點頭道。
輸入
第一行一個整數N,表示測試資料組數。
接下來的N*2行,每兩行表示一個測試資料。在每一個測試資料中,第一行為模式串,由不超過10^4個大寫字母組成,第二行為原串,由不超過10^6個大寫字母組成。
其中N<=20
輸出
對於每一個測試資料,按照它們在輸入中出現的順序輸出一行Ans,表示模式串在原串中出現的次數。
5
HA
HAHAHA
WQN
WQN
ADA
ADADADA
BABABB
BABABABABABABABABB
DAD
ADDAADAADDAAADAAD
樣例輸出
3
1
3
1
0
題目連結:http://hihocoder.com/problemset/problem/1015
#include <cstdio>
#include <cstring>
int const MAXN = 1e6 + 5;
int const MAXM = 1e4 + 5;
char s[MAXN], t[MAXM];
int next[MAXM], n;
void get_next()
{
next[0] = -1;
int i = 0, j = -1;
while(t[i] != '\0')
{
if(j == -1 || t[i] == t[j])
{
i ++;
j ++;
next[i] = j;
}
else
j = next[j];
}
}
int KMP()
{
get_next();
int i = 0, j = 0, ans = 0, len = strlen(t);
while(s[i])
{
if(j == -1 || s[i] == t[j])
{
i ++;
j ++;
}
else
j = next[j];
if(j == len)
{
j = next[j];
ans ++;
}
}
return ans;
}
int main()
{
scanf("%d", &n);
while(n --)
{
scanf("%s %s", t, s);
printf("%d\n", KMP());
}
}
相關文章
- KMP模板KMP
- JAVA KMP 純模板JavaKMP
- KMP 演算法KMP演算法
- KMP演算法KMP演算法
- 演算法之KMP演算法KMP
- 【演算法】KMP演算法演算法KMP
- 白話 KMP 演算法KMP演算法
- 【演算法】KMP初識演算法KMP
- KMP演算法詳解KMP演算法
- 解讀KMP演算法KMP演算法
- KMPKMP
- 演算法(2)KMP演算法演算法KMP
- KMP模式匹配演算法KMP模式演算法
- KMP字串匹配演算法KMP字串匹配演算法
- KMP演算法 Java實現KMP演算法Java
- 字串匹配演算法:KMP字串匹配演算法KMP
- kmp——板子~~~KMP
- 模式匹配kmp演算法(c++)模式KMP演算法C++
- 演算法·理論:KMP 筆記演算法KMP筆記
- 字串匹配問題——KMP演算法字串匹配KMP演算法
- KMP演算法(Leetcode第28題)KMP演算法LeetCode
- 字串匹配之KMP《演算法很美》字串匹配KMP演算法
- 專題十六 KMP & 擴充套件KMP & Manacher【Kuangbin】KMP套件
- 【字串匹配】KMP字串匹配KMP
- KMP&exKMPKMP
- KMP-字串KMP字串
- KMP演算法和bfprt演算法總結KMP演算法
- 字串匹配演算法(三)-KMP演算法字串匹配演算法KMP
- 字串匹配-BF演算法和KMP演算法字串匹配演算法KMP
- 字串匹配基礎下——KMP 演算法字串匹配KMP演算法
- 資料結構-KMP模式演算法資料結構KMP模式演算法
- kmp字串匹配,A星尋路演算法KMP字串匹配演算法
- 把KMP演算法嚼碎!(C++)KMP演算法C++
- 字串演算法--$\mathcal{KMP,Trie}$樹字串演算法KMP
- P5410 【模板】擴充套件 KMP(Z 函式)套件KMP函式
- 匹配字串之——KMP演算法深入理解字串KMP演算法
- 6.1 KMP演算法搜尋機器碼KMP演算法機器碼
- 快速字串匹配一: 看毛片演算法(KMP)字串匹配演算法KMP
- 小白KMP演算法遇難,求大佬相救KMP演算法