上一章计算出来了模式字符串针对每个字符的有限状态机,这一章就进入字符串的匹配。
进行匹配之前需要确定的是匹配失败状态和匹配成功状态
失败状态
字符串的匹配到什么时候是失败状态呢?
1、要匹配的字符串i>=长度&&模式字符串状态!=长度
成功状态
1、要匹配的字符串<长度&&模式字符串状态==长度
根据以上两种我们实现最终的kmp算法
1、校验字符串是否匹配
function kmp(str,patternString){
const dfaMap=dfa(patternString);
let end=patternString.length-1;
let j=0;
for(let i=0;i<str.length;i++){
//找到i+1需要和下一位j匹配的位置所在
j=dfaMap[str.charCodeAt(i)][j];
if(j===end){
return true;
}
}
if(j===end){
return true;
}
return false;
}