luoguP3375 模板 KMP字串匹配

2021-08-17 13:17:55 字數 909 閱讀 2388

如題,給出兩個字串s1和s2,其中s2為s1的子串,求出s2在s1中所有出現的位置。

為了減少騙分的情況,接下來還要輸出子串的字首陣列next。

輸入格式:

第一行為乙個字串,即為s1

第二行為乙個字串,即為s2

輸出格式:

若干行,每行包含乙個整數,表示s2在s1中出現的位置

接下來1行,包括length(s2)個整數,表示字首陣列next[i]的值

輸入樣例#1:

複製

abababc

aba

輸出樣例#1:

複製

1

30 0 1

時空限制:1000ms,128m

資料規模:

設s1長度為n,s2長度為m

對於30%的資料:n<=15,m<=5

對於70%的資料:n<=10000,m<=100

對於100%的資料:n<=1000000,m<=1000000

樣例說明:

所以兩個匹配位置為1和3,輸出1、3

分析

#include#define n 1000005

using namespace std;

int n,m,f[n];

char t[n],p[n];

int main()

f[m]=0;

int j=0;

for(int i=0;i

for(int i=1;i<=m;i++)

printf("%d ",f[i]);

return 0;

}

Luogu P3375 模板 KMP字串匹配

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

Luogu P3375 字串匹配KMP演算法模板

luogu p3375 對於字串匹配,有一種很顯然的樸素演算法 在s1中列舉起點一位一位匹配,失配之後起點往後移動一位,從頭開始進行匹配。這種演算法的時間複雜度幾乎達到了 o nm 顯然是不能接受的。這種做法的缺點在於做了很多無用的匹配,並且每一次都從頭開始匹配,完全忽略上一次匹配的資訊。而kmp演...

luogu P3375 KMP字串匹配 模板

精華 在每次失配後不從頭匹配而是嘗試找乙個新的開始並且是新開始的位置最長的相同字首和字尾。實際上kmp是一種自己匹配自己的模式。好好理解qaq include include include include using namespace std const int maxn 1000001 cha...