本想提高匹配效率,查资料写了个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]=-1;
- for(i=1;i<l_srhstr;i++){
- vec[i]=(srhstr[k]==srhstr[i])?vec[k]:k;
- if(srhstr[i]==srhstr[k])k++;
- else{k=(srhstr[i]==srhstr[0])?1:0;};
- }
- //查找子串
- i=j=0;
- while(i<l_mainstr){
- if(mainstr[i]==srhstr[j]){j++;i++;}
- else{
- if(vec[j]==-1){j=0;i++;}
- else{j=vec[j];}
- }
- //是否找到子串
- if(j==l_srhstr){
- return i-j;
- }
- }
- return -1;
- }