如題,給出兩個字串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
//
// 洛谷p3375-kmp.cpp
// cheese
//// created by 廖啟帆 on 2019/4/4.
///*
abababc
aba 1
3 0 0 1
*/#include #include #include using namespace std;
int kmpcount(char text,char pattern);
void getnext(char s,long len);
int nexts[1000100]=;
char text[1000100],pattern[1000100];
int main()
return 0;
}int kmpcount(char text,char pattern)
if (text[i]==pattern[j+1])
if (j==m-1)
}return count; //返回成功匹配次數
}void getnext(char s,long len)
if (s[i]==s[j+1])
nexts[i]=j; //令nexts[i]=j}}
洛谷 P3375 模板 KMP字元匹配
如題,給出兩個字串s1和s2,其中s2為s1的子串,求出s2在s1中所有出現的位置。為了減少騙分的情況,接下來還要輸出子串的字首陣列next。輸入格式 第一行為乙個字串,即為s1 第二行為乙個字串,即為s2 輸出格式 若干行,每行包含乙個整數,表示s2在s1中出現的位置 接下來1行,包括length...
洛谷 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...