KMP演算法總結

2021-06-09 07:32:02 字數 960 閱讀 1961

kmp題目重在理解next陣列的含義:

next陣列的作用 :next[j]  

記錄模式串中第 j 個字元的最長公共字首長度(重要,這是它的意義所在)

第二種理解方式,當模式串與主串失配時,跳回的位置。

next[len] (即字串'\0'結束標誌的next值):單個字串匹配時與週期有關

hdu 1711(模板題)  

3336  

1358  

2203  

2594  

3746

hdu 1711

#include #include using namespace std;  

int a[1000005],b[10005];

int p[10005];

int n,m;

void getnext ()

if (b[i] == b[j+1]) j++;

p[i] = j;

} } void kmp ()

if (b[j+1] == a[i]) j++;

if (j == m)

} printf("%d\n",-1);

} int main ()

return 0;

}

hdu 3746

#include #include #define len 1000001

int next[len];

int len;

char str[len];

void getnext()

else

}}int main()

else if(len%period == 0)

else

}return 0;

}

KMP演算法總結

kmp演算法是用來實現模式匹配的,其時間複雜度是o m n 具體原理見 其中有用到next陣列來計算子串中公共項的位數,簡單來說,就是子串遇到不匹配時,就查next資料來決定前進幾位 移動位數 已匹配的字元數 對應的部分匹配值 1 要不要減一看next陣列第一位是不是為1,個人覺得加一後是有好處的,...

KMP演算法總結

現在假設有兩個字串a bbc abcdab abcdabde,b abcdabd。現在要在a中找b。比較暴力的方法是直接搜尋 void gosearch 上述 最核心就是while迴圈,舉兩個例子說明其作用 還是選取b串作為說明。假設現在要求next 6 那麼當前的j next 5 1 next陣列...

kmp演算法總結

kmp演算法總結 kmp演算法,是一種減少字串匹配時複雜度的演算法,本演算法減少了兩個字串遇到不相等的情況是的匹配次數,也就是減少了主串的回溯次數,跳過了不必要的匹配,使原來的m n的時間複雜度變成了m n。kmp演算法大致分為兩個部分 next陣列,next陣列記錄了模式串字首字尾的長度,求模式串...