刚才看到新闻频道转截的一篇文章:,图文并茂通俗易懂,就用JS实现了一下,现分享出来。
算法的核心是部分匹配表和回退算法,部分匹配表的实现如下:
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
欢迎交流讨论。