精華:在每次失配後不從頭匹配而是嘗試找乙個新的開始並且是新開始的位置最長的相同字首和字尾。
實際上kmp是一種自己匹配自己的模式。好好理解qaq
#include #include #include #include using namespace std;
const int maxn = 1000001;
char a[maxn], b[maxn];
int next[maxn], lena, lenb;
int main()
//對next失配陣列的預處理,其實也是乙個自己匹配自己的過程
j = 0;
for(int i = 0; i < lena; i++)
}for(int i = 1; i <= lenb; i++)
printf("%d ",next[i]);
return 0;
}
luoguP3375 模板 KMP字串匹配
如題,給出兩個字串s1和s2,其中s2為s1的子串,求出s2在s1中所有出現的位置。為了減少騙分的情況,接下來還要輸出子串的字首陣列next。輸入格式 第一行為乙個字串,即為s1 第二行為乙個字串,即為s2 輸出格式 若干行,每行包含乙個整數,表示s2在s1中出現的位置 接下來1行,包括length...
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演...