// 計(jì)算next數(shù)組
function calcNext(str) {
let next = [-1],
len = str.length,
i = 1,
j = -1;
for (i = 1; i < len; i++) {
while (str[i] !== str[j + 1] && j > -1) {
j = next[j];
}
if (str[j + 1] === str[i]) {
j = j + 1;
}
next[i] = j;
}
return next;
}
// source 源字符串
// match 要匹配的字符串
// res 保存匹配位置的數(shù)組
function search(source, match) {
let next = calcNext(match),
m = source.length,
n = match.length,
i = 0,
j = 0,
res = [];
while (i < m - n) {
if (source[i] === match[j]) {
i++;
j++;
if (j === n) {
res.push(i - n);
j = next[j - 1] + 1;
}
} else {
if (j === 0) {
i++;
} else {
j = next[j - 1] + 1;
}
}
}
return res;
}
let source = '21231212121231231231231232234121212312312312331212123',
match = 'abba';
let res = search(source, match);
console.log(res);
JS實(shí)現(xiàn)KMP算法
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- talk is cheap,show me the code: 參考鏈接: 阮一峰-字符串匹配的KMP算法[KMP...
- 1 需求分析 1.1 系統(tǒng)目標(biāo) 實(shí)現(xiàn)題目說(shuō)所要求的三種匹配算法的算法設(shè)計(jì),算法實(shí)現(xiàn),程序能夠穩(wěn)定,準(zhǔn)確的運(yùn)行并實(shí)現(xiàn)...
- RAM(Random-access memory)在任何軟件開(kāi)發(fā)中都是非常寶貴的資源,移動(dòng)操作系統(tǒng)由于其物理內(nèi)存的...