本想提高匹配效率,查资料写了个javascript版的KMP算法,写好后发现我需要的是拼音首字母匹配,不适用,暂存一下。
function match(mainstr,srhstr){//KPM匹配算法,用于快速匹配字符串
if(!mainstr||!srhstr)return -1;
var l_mainstr=mainstr.length;
var l_srhstr=srhstr.length;
//构建失配后特征数组
var k=0;
var vec=new Array();
vec[0]=0;
for(i=1,k=0;i<l_srhstr;i++){
while(k>0 && srhstr[i]==srhstr[k]){
k = vec[k-1];
}
if(srhstr[i]==srhstr[k])k++;
vec[i] = k;
}
//查找子串
i=j=0;
while(i<l_mainstr){
if(mainstr[i]==srhstr[j]){
j++;i++;
//是否找到子串
if(j==l_srhstr){
return i-j;
}
}
else{
if(vec[j]==0){j=0;i++;}
else{j=vec[j-1];}
}
}
return -1;
}