P3375 模板 KMP字串匹配

2021-08-21 10:43:40 字數 900 閱讀 5825

題目描述

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

樣例說明:

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

就是kmp的模板

#include

#include

#include

#define n 1000010

int lena,lenb;

char a[n],b[n];

int next[n];

using

namespace

std;

void prepare()

}int main()

}for(int i=1;i<=lena;i++)

cout

<' ';

}

P3375 模板 KMP字串匹配

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

P3375 模板 KMP字串匹配

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

題解 P3375 模板 KMP字串匹配

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