字符串匹配之KMP算法初探

来源:互联网 发布:适合数据分析的电脑 编辑:程序博客网 时间:2024/06/07 20:56

按惯例AD下搜索易:http://www.i-ssy.com/ 

因为javascript无需编译可直接在浏览器执行,所以使用javascript编写,其他环境也一样的 稍作修改即可,优化了下代码,可以从指定位置开始查找


范例中的遍历查找所有字符串


执行结果:



代码:

function search(src,find,start){/// <summary>///字符串匹配(KMP)/// </summary>/// <param name="src" type="String">原始字符串</param>/// <param name="find" type="String">要查找的字符串</param>/// <param name="start" type="Number">起始位置(默认为0)</param>/// <returns type="Number">返回匹配字符串的位置,不存在则返回-1</returns>if (typeof start !== "number" || start <0) {start = 0;}var lenSrc = src.length;var lenFind = find.length;if(lenFind<=lenSrc){src = src.split("");find = find.split("");var temp;lenSrc-=lenFind-1;for (var i = start; i < lenSrc; i++) {//初始化临时temptemp = 0;for(var j=0;j<lenFind;j++){var charSrc = src[i+j];var charFind = find[j];if(charSrc===charFind){if(j==lenFind-1){return i;}else if(j>0){if(charSrc==src[i + temp]){temp +=1;}else{temp=0;}}else{temp=0;}}else{if(temp>0){//console.log 便于查看结果//console.log("start:" + i + " jump to " +  (i + j - temp) + " step " + (j - temp));//-1是因为 for循环下次会+1i+=(j - temp - 1);}break;}}}}return -1;};


原创粉丝点击