标签:kmp 相等 span pst zha 开始 htm == 字符
//求匹配串的最长前缀后缀数组 function getMax(str){ var prefix=[]; //前缀 var suffix=[]; //后缀 var newMax=[]; //最长前缀后缀数组 for(var i=0;i<str.length;i++){ var tmpStr=str.substring(0,i+1); if(tmpStr.length==1){ newMax[i]=0; }else{ for(var k=0;k<i;k++){ prefix[k]=tmpStr.slice(0,k+1); suffix[k]=tmpStr.slice(-k-1); //如果前后缀相等,则放进数组next中 if(prefix[k]==suffix[k]){ newMax[i]=prefix[k].length; } } if(!newMax[i]){ newMax[i]=0; } } } return newMax; } //s字符串,p模式串 function KMP(s,p){ var max=getMax(p); var result; for(var i=0;i<s.length;i++){ for(var j=0;j<p.length;j++){ //如果匹配 if(s[i]==p[j]){ //如果匹配完成 if(j==p.length-1){ result=i-j; break; }else{ i++; } }else{ if(j>1 && max[j-1]>0){ i+=(i-j-max[j-1]); }else{ //i回到开始匹配的位置 i=i-j; } break; } } if (result || result == 0) { break; } } if (result || result == 0) { return result } else { return -1; } } var s = "BBC ABCDAB ABCDABCDABDE"; var p = "ABCDABD"; KMP(s,p);
参考链接:http://www.cnblogs.com/zhangtianq/p/5839909.html
标签:kmp 相等 span pst zha 开始 htm == 字符
原文地址:http://www.cnblogs.com/wanghuohuo/p/7597502.html