kmp字串
給定乙個模式串s,以及乙個模板串p,所有字串中只包含大小寫英文本母以及阿拉伯數字。
模板串p在模式串s中多次作為子串出現。
求出模板串p在模式串s中所有出現的位置的起始下標。
輸入格式
第一行輸入整數n,表示字串p的長度。輸出格式第二行輸入字串p。
第三行輸入整數m,表示字串s的長度。
第四行輸入字串s。
共一行,輸出所有出現位置的起始下標(下標從0開始計數),整數之間用空格隔開。資料範圍
1 ≤ n ≤ 104輸入樣例:1 ≤ m ≤ 105
3輸出樣例:aba5
ababa
0 2
#include
using
namespace std;
const
int n =
10010
, m =
100010
;//定義兩個常量
intmain()
// for(int i = 1; i <= n; i++)
// printf("%d", next[i]); 檢測 next陣列是否正確
//匹配過程
for(
int i =
1, j =
0;i <= m; i++)}
return0;
}
注意: KMP 簡單易懂
解決問題 str1中是否有某個子串等於str2,有則返回在str1中得到起始位置。舉例 abcabck 和 abcabct 此時返回 1 abcabcabct 和 abcabct 此時返回3 常規思路 用str2去比較str1從0開始的每一位,比較結束若有str2返回此時比較的起始位置,否則返回 1...
通俗講解KMP演算法,簡單易懂
相比較傳統的暴力匹配字串演算法,kmp演算法有了比較大的改進,但是它卻更難理解,尤其是next陣列的求解部分。本人也反覆學習了幾次,每次弄懂但幾個月就忘了,然後就找部落格重新學,下次忘了就能看自己的博文了,哈哈。模式串 abcabcabda 目標串 abcabd 暴力演算法中當目標串第六個字母d不匹...
演算法筆記 字串匹配KMP演算法,簡單易懂
kmp演算法看懂了就會感覺挺容易的,思路也很清晰。看不懂就會稀里糊塗。先說什麼是字串匹配 字串匹配。簡單來說,就是給你兩個字串,尋找其中乙個字串是否包含另乙個字串,如果包含,返回包含的起始位置。比如下面兩個字串 string s1 bacbababadababacacabc string s2 ab...