算法的核心是部分匹配表和回退算法,部分匹配表的实现如下:
function kmpGetStrPartMatchValue(str) { var prefix = []; var suffix = []; var partMatch = []; for(var i=0,j=str.length;i
回退算法实现如下:
function KMP(sourceStr,targetStr){ var partMatchValue = kmpGetStrPartMatchValue(targetStr); var result = false; for(var i=0,j=sourceStr.length;i0 && partMatchValue[m-1] > 0){ m = partMatchValue[m-1]-1; } else { break; } } } if(result){ break; } } return result; } var s = "BBC ABCDAB ABCDABCDABDE"; var t = "ABCDABD"; console.log(KMP(s,t)); //output: true