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陣列表示的是...