**kmp演算法:
(大部分人的kmp寫法都是不一樣的)
一:先給大家推薦乙個講kmp比較好理解的乙個部落格:阮一峰
二:栗子:
p串: abcbd
字首:a,ab,abc,abcb,abcbd
真字首:a,ab,abc,abcb
字尾:d,bd,cbd,bcbd,abcbd
真字尾:d,bd,cbd,bcbd
kmp演算法裡的next陣列的含義:
栗子:p串: abcdabd
next = ;
next[i] 的含義:p串前 i 個字元(包括第 i 個)的最長真字首字尾公共長度;
如 i = 5時:
真字首:a,ab,abc,abcd
真字尾:bcda,cda,da,a
顯而易見, 字首和字尾相同的只有 a,而 a 的長度為 1,所以next[5] = 1;
//用通俗的語句說就是k是用來表示子串中前k個和後k個是相同的,i是用來遍歷陣列
void get_next(char *t,int
lent)
else k =nex[k];
/*如果c[i]和c[k]中字元不同說明匹配是失敗,要把k的值重新退到next[ k ]
直到兩者相同才停止。這樣做的好處是沒必要再重新從頭再來,節約時間*/}
}
//幾道例題:返回主串中匹配的位置(第乙個),如果不匹配返回-1;
intkmp(char *s,char *t,int lens,int lent)
}else j=nex[j];
}return -1
;}
洛谷p3375:
#include#includeview codeusing
namespace
std;
const
int maxn = 1e6 + 10
;int
nex[maxn];
char
s[maxn],t[maxn];
intlens,lent;
void
get_next()
else k =nex[k];
}}
void
kmp()
}else j=nex[j];
}}int
main()
}return0;
}
演算法小白KMP入門(捂臉)
先放題吧.給定乙個字串 模式串 和一些待查詢的字串,求每個待查詢字串在模式串中出現的次數 可重疊 測試資料有多組 測試組數 5 第一行包括乙個字串p,長度不超過105,且非空串 第二行包括乙個整數n,代表待查詢的字串數量 1 n 5 接下來的n行,每一行包括乙個待查詢的字串,其長度不超過50,且非空...
讓內網穿透變的更簡單,小白看了直呼內行!!!
原生外掛程式中,有乙個比較有趣的功能,內網穿透。內網穿透能讓沒有公網 ip 的使用者獲得與公網 ip 使用者相同的權利。比如檔案分享 http 服務共享等等。最常見的應用 將家中電腦的某個資料夾分享出來,在外出的時候可以隨時連回家獲取檔案。utools 的內網穿透有三種模式 http 服務要求你在電...
KMP演算法詳解 適合初學KMP演算法的朋友
相信很多人 包括自己 初識kmp演算法的時候始終是丈二和尚摸不著頭腦,要麼完全不知所云,要麼看不懂書上的解釋,要麼自己覺得好像心裡了解kmp演算法的意思,卻說不出個究竟,所謂知其然不知其所以然是也。經過七八個小時地仔細研究,終於感覺自己能說出其所以然了,又覺得資料結構書上寫得過於簡潔,不易於初學者接...