BF算法和KMP算法(javascript版本)
var str="abcbababcbababcbababcabcbaba";//主串 var ts="bcabcbaba";//子串 function BF(s,t){//BF算法 var i=0,j=0,v=-1; while(i<s.length&&j<t.length){ if(s[i]==t[j]){//相等就移动指针 i++; j++; } else{//指针归零 i=i-j+1; j=0; } } if(j==t.length){//判断是否 v=i-j; }else{ v=-1; } return v; } //KMP function GetNext(t,arr){ var k=-1,j=0; arr[0]=-1; while(j<t.length-1){ if(k==-1||t[j]==t[k]){ j++; k++; arr[j]=k; }else{ k=arr[k]; } } } function Kmp(s,t){ var pattern=new Array(t.length); var j=0,i=0,v=0; GetNext(t,pattern); while(i<s.length&&j<t.length){ if(j==-1||s[i]==t[j]){ i++; j++; } else{ j=pattern[j]; } } if(j>=t.length){ v=i-t.length; } else{ v=-1; } return v; }