洛谷 P3375 KMP字串匹配

2021-08-07 04:35:14 字數 1087 閱讀 9035

題目描述:

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

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

輸入輸出格式

輸入格式:

第一行為乙個字串,即為s1(僅包含大寫字母)

第二行為乙個字串,即為s2(僅包含大寫字母)

輸出格式:

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

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

輸入輸出樣例

輸入樣例#1:

abababc

aba

輸出樣例#1:

1 3

0 0 1

說明時空限制:1000ms,128m

資料規模:

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

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

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

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

樣例說明:

題解:就是kmp演算法,模板題,但是千萬注意,在洛谷陣列名字不可能用next,會編譯錯誤,非常得迷幻。

#include

#include

#include

//#include迷之萬能標頭檔案,比賽可不能用喔

using

namespace

std;

int next[10100000],la,lb;//由於洛谷不能用next作為陣列名,我就用了大寫的next

char a[10000100],b[10000100];

void gnext()//搞那個陣列嘛,注意洛谷這個陣列名字不可能用next,會編譯錯誤

此文謹記我搞了一整個星期天被洛谷迷之編譯錯誤搞死的kmp演算法!!!!

KMP 洛谷 3375 KMP字串匹配

給出a,b兩個字串,求出b串在a串中出現的位置以及b串中的每乙個位置的next 就是代表b串中以當前位置結尾的子串和b的字首可以匹配的最大長度 kmp的模板題。我們設兩個指標i,j 其中i指a,j指b 如果可以擴充套件j的話我們就讓j 1,否則我們讓j next j 把匹配的長度縮短,看能不能從這裡...

洛谷 P3375 模板 KMP字串匹配

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

洛谷 P3375 模板 KMP字串匹配

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