字串匹配 KMP

2021-08-03 20:28:29 字數 1129 閱讀 2764

題目描述:

給定兩個由小寫字母構成的字串 l 和 s 。

請你從左到右,找出子串 l 在母串 s 中每次出現的開始位置(匹配位置)。

輸入格式:

第一行:給乙個全由小寫字母構成的母串 s(0<s的長度≤1000000);

第二行:給乙個全由小寫字母構成的子串 l(0<l的長度≤s的長度)。

輸出格式:

按公升序輸出一行乙個整數,分別表示子串 l 在母串 s 中每次出現的開始位置。

如果子串 l 在母串 s 中沒有出現,則輸出「no」。

樣例輸入1:

yuabcierabcde

abc

樣例輸出1:

3 9

樣例輸入2:

abcdefg

abcdefu

樣例輸出2::

no題目分析:

kmp模板題。

附**:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=1e6+10;

char s[maxn],t[maxn];

int lens,lent,nxt[maxn];

bool check;

int main()

for(int i=1,j=0;i<=lens;i++)

}if(check==false) printf("no");

return

0;}

kmp字串匹配

首先要對模式串進行預處理。預處理過程就是計算出指定位置的字首和字尾的最大相同的長度 啊啊啊啊。估計只有我乙個人能看懂 這個文章說得很清楚 比如說 a a a c b c a a a 0 1 2 0 0 0 1 2 3 void getnext int next,char par 20 int n 翻...

字串匹配 KMP

參考 從頭到尾徹底理解kmp 在字串 str 中 匹配模式串 pattern 1.計算模式串的 next 陣列 2.在字串中匹配模式串 當乙個字元匹配時,str i pattern k 繼續匹配下乙個字元 當當前字元不匹配時,根據 next 陣列移動模式字串,k next k next 陣列 描述模...

KMP字串匹配

判斷s中是否含有字串t。一般思路為 從s中首字元開始,依次與t中進行比對,直到t結尾或者某乙個位置兩者不同 如果到t的結尾,則表示s中含有t。如果有乙個位置不相同,那麼從s中下乙個字元開始,再次與t中字元比對。如下 i 0,j 0 for i len 這樣的比較,每一次遇到不同的時候都需要從t串的第...