字符串匹配之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
  • 43KB
  • 下载

kmp算法(字符串匹配 next应用 hdu题目集合)

关于kmp算法的有关解释百度中有很多,可以自己查询更详细部分,其实最主要的就是next数组(以下题目我用的是on,因为hdu中直接用next变量或编译出错),当无法匹配时匹配字串跳转到前串中类似的位置...
  • M_GSir
  • M_GSir
  • 2016年08月20日 08:43
  • 286

字符串匹配的KMP算法

  • 2014年05月29日 14:11
  • 2.02MB
  • 下载

字符串匹配KMP算法

  • 2012年09月03日 13:41
  • 239KB
  • 下载

字符串匹配的KMP算法-16张图片看明白

字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,...

数据结构字符串匹配——KMP算法

传统的字符串匹配 1.思路: 重头开始,依次将主串与次串相比较。如果相同则比较主串与次串的下一个字符;如果不同,则回溯至之前主串比较的后一个字符,再与次串进行一对一比较,直至主串比完。 2.代码实现:...
  • ilblue
  • ilblue
  • 2016年10月19日 21:45
  • 275

KMP算法,字符串匹配过程

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

C语言实现字符串匹配KMP算法

相信很多人(包括自己)初识KMP算法的时候始终是丈二和尚摸不着头脑,要么完全不知所云,要么看不懂书上的解释,要么自己觉得好像心里了解KMP算法的意思,却说不出个究竟,所谓知其然不知其所以然是也。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串匹配之KMP算法初探
举报原因:
原因补充:

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