字符串匹配之KMP算法初探

按惯例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++) {
			//初始化临时temp
			temp = 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循环下次会+1
							i+=(j - temp - 1);
						}
					break;
				}
			}
		}
	}
	return -1;
};


阅读更多
文章标签: kmp 优化 javascript
个人分类: Javascript
想对作者说点什么? 我来说一句

字符串匹配KMP算法

2012年09月03日 239KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭