如題,給出兩個字串s1和s2,其中s2為s1的子串,求出s2在s1中所有出現的位置。
為了減少騙分的情況,接下來還要輸出子串的字首陣列next。
輸入格式:
第一行為乙個字串,即為s1
第二行為乙個字串,即為s2
輸出格式:
若干行,每行包含乙個整數,表示s2在s1中出現的位置
接下來1行,包括length(s2)個整數,表示字首陣列next[i]的值
輸入樣例#1:
複製
abababc輸出樣例#1:aba
複製
1時空限制:1000ms,128m30 0 1
資料規模:
設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...