码迷,mamicode.com
首页 > 其他好文 > 详细

KMP算法

时间:2014-08-08 02:00:55      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:for   算法   amp   return   class   as   main   count   

/*
KMP算法
*/

void main()
{
	putsl(find('abc123','c1'))
	putsl(find('abc123','c2'))
}

int find(rstr s,rstr p)
{
	next=get_next(p)
	i=0
	j=0
	for i<s.count&&j<p.count
		if j==-1||s[i]==p[j]
			i++
			j++
		else
			j=next[j]
	if j==p.count
		return i-j
	return -1
}

rbuf<int> get_next(rstr p)
{
	rbuf<int> next(p.count)
	next[0]=-1
	k=-1
	j=0
	for j<p.count-1
		if k==-1||p[j]==p[k]
			j++
			k++
			if p[j]!=p[k]
				next[j]=k
			else
				next[j]=next[k]
		else
			k=next[k]
	return next
}

KMP算法,布布扣,bubuko.com

KMP算法

标签:for   算法   amp   return   class   as   main   count   

原文地址:http://blog.csdn.net/roundsheep/article/details/38428293

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!