P3375 模板 KMP字串匹配

2021-08-27 08:53:47 字數 893 閱讀 6887

如題,給出兩個字串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

第一次在這個oj上刷題,發現評判是真的很嚴格,定義多餘的變數竟然也會判錯。。。。。

#includeusing namespace std;

int len1,len2;

int next[1000005];

char s[1000005],t[1000005];

void next_find()

else

}}void kmp()

else

if(j==len2)

}}int main()

return 0;

}

P3375 模板 KMP字串匹配

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

P3375 模板 KMP字串匹配

這道題其實幾周前就已經切掉了,但是偶然間發現自己還沒發部落格,就來補一篇好了。kmp這個東西,網上講得太複雜,其實很簡單,也很容易解釋。就是分為兩部分 先維護next陣列 得先知道對next的定義吧?不知道可以上網查查 利用已經求好的next來計算。提醒一下,注意邊界判斷。不會的可以直接看我的 反正...

題解 P3375 模板 KMP字串匹配

這道題目是比較經典的 kmp 模板,用乙個模式串匹配乙個文字串,輸出全部匹配的位置 首先考慮最暴力的做法 我們從最開始的位置暴力匹配,如果成功,那麼就返回 i j i 是文字串當前的位置,j 是模式串當前的位置 否則,我們就回溯到 i j 1 因為我們開始匹配的位置是 i j 那麼它的下一位就是 i...