kmp算法学习(三)字符串匹配

238 阅读1分钟

上一章计算出来了模式字符串针对每个字符的有限状态机,这一章就进入字符串的匹配。

进行匹配之前需要确定的是匹配失败状态和匹配成功状态

失败状态

字符串的匹配到什么时候是失败状态呢?

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;
}