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

2021-08-22 19:30:01 字數 609 閱讀 2898

poj3461傳送門

特殊的樣例:

azaazazaza

輸出:所以next陣列要多一位,0 1 1 2

當模式串比較完之後要指向的是next陣列的最後一位,即開始從第二位字母比較,模擬過程如下:

azazaza        azazaza

aza                    aza

所以這道題和最基礎的文字串和模式串比較不太一樣,是文字串和子串的匹配

ac**:

#include #include #define maxn 1000005

using namespace std;

char s1[maxn],s2[maxn];//s1文字串,s2模式串

int nnext[maxn];

int main()

else k=nnext[k];

}i=1,j=1;//i指文字串,j指模式串

while(i<=len1)

else j=nnext[j];

if(j>len2)

}printf("%d\n",ans);

}return 0;

}

kmp演算法鞏固 以poj3461為試驗

本來計畫下一步去搞ac自動機的 忽發現它以kmp為基礎 雖然假期練過,但基本內涵都不太清楚了,都是直接套模板orz 是本次來再補一下 總算把自己的板給寫出來了,真是可喜可賀xd 以下先是kmp的重新理解部分 用parent表示母串,son表示子串 當比較母串和子串時,以abcdefg和bcdf為例 ...

POJ 3461字串匹配演算法

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

poj 3461 kmp演算法詳細解釋

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