字符串匹配之KMP算法初探

原创 2013年12月05日 13:16:32

按惯例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算法浅析

  • 2014-08-26 14:51
  • 139KB
  • 下载

字符串匹配KMP算法讲解

  • 2011-06-04 09:15
  • 42KB
  • 下载

字符串匹配的KMP算法

字符串匹配的KMP算法 字符串匹配 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? ...

字符串匹配的KMP算法

  • 2014-05-29 14:11
  • 2.02MB
  • 下载

字符串匹配KMP算法

  • 2012-09-03 13:41
  • 238KB
  • 下载

KMP算法,字符串匹配过程

原文  http://www.matrix67.com/blog/archives/115/ 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。     我们这里说的K...

字符串匹配算法之KMP算法

  • 2013-10-16 22:33
  • 2.97MB
  • 下载

C语言-字符串匹配-KMP算法及next数组求解和运用实例

1. 目标 求解一个目标串的next数组,运用next数组寻找s串中是否有T串,没有返回-1,如果有返回s的下标值。 2. 运行示例 如下: 3.代码分析 对next...

字符串匹配的KMP算法

字符串匹配的KMP算法 作者: 阮一峰 日期: 2013年5月 1日 字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)