KMP 洛谷 3375 KMP字串匹配

2021-08-20 07:07:24 字數 596 閱讀 6501

給出a,b兩個字串,求出b串在a串中出現的位置以及b串中的每乙個位置的next(就是代表b串中以當前位置結尾的子串和b的字首可以匹配的最大長度)。

kmp的模板題。我們設兩個指標i,j(其中i指a,j指b),如果可以擴充套件j的話我們就讓j+1,否則我們讓j=next[j],把匹配的長度縮短,看能不能從這裡繼續擴充套件,直到j變成0後我們就重頭開始匹配。求next的方法和這個類似,就是讓b串和b串自己匹配。

#include

#include

#define maxn 1000001

using

namespace std;

int next[maxn]

,l1,l2;

char s1[maxn]

,s2[maxn]

;int

main()

j=0;

for(

int i=

1;i<=l1;i++)}

for(

int i=

1;i<=l2;i++

)printf

("%d "

,next[i]);

}

KMP字串匹配 洛古3375 kmp水題

如題,給出兩個字串s1和s2,其中s2為s1的子串,求出s2在s1中所有出現的位置。為了減少騙分的情況,接下來還要輸出子串的字首陣列next 好久沒動到部落格,因為中考。但是中考結束了!可以浪了,所以複習一下kmp,c 版 具體見dalao ps 幾個月沒打到 了,一起手盡不知道要幹什麼 inclu...

洛谷 P3375 KMP字串匹配

題目描述 給出兩個字串s1和s2,其中s2為s1的子串,求出s2在s1中所有出現的位置。為了減少騙分的情況,接下來還要輸出子串的字首陣列next。輸入輸出格式 輸入格式 第一行為乙個字串,即為s1 僅包含大寫字母 第二行為乙個字串,即為s2 僅包含大寫字母 輸出格式 若干行,每行包含乙個整數,表示s...

洛谷 P3375 模板 KMP字串匹配

題目大意 給出n長的字串s1,m長的字串s2,求出s2在s1中所有出現的位置。用kmp做,先輸入每一次s2出現的位置,然後輸出s2的字首陣列next。題解 kmp next i 表示需要匹配的字串的最長公共前字尾的長度。怎麼求next i 呢?首先初值next 1 0,j 0 對於每乙個如果s2 j...